Python 如何在没有线程的情况下在短时间内锁定多个ajax请求的函数
我正在处理这个问题,我看到一些人也在挣扎。我需要一些基于Facebook的功能,比如按钮事件。因此,我捕捉到单击按钮的事件,并使用ajax调用我的函数。但是每次单击我的函数都会被调用多次,从3次到8次不等。问题是,这个函数创建的模型应该是唯一的,而且由于即时多调用,我得到了多个对象。 如何预防?我尝试设置全局变量,但没有任何运气:Python 如何在没有线程的情况下在短时间内锁定多个ajax请求的函数,python,django,locking,xmlhttprequest,facebook-like,Python,Django,Locking,Xmlhttprequest,Facebook Like,我正在处理这个问题,我看到一些人也在挣扎。我需要一些基于Facebook的功能,比如按钮事件。因此,我捕捉到单击按钮的事件,并使用ajax调用我的函数。但是每次单击我的函数都会被调用多次,从3次到8次不等。问题是,这个函数创建的模型应该是唯一的,而且由于即时多调用,我得到了多个对象。 如何预防?我尝试设置全局变量,但没有任何运气: def send_submission(request): global BLOCKED if BLOCKED == 0: logg
def send_submission(request):
global BLOCKED
if BLOCKED == 0:
logging.debug("should be locked")
BLOCKED = 1
(... do something...)
BLOCKED = 0
html = render_page(request)
ajax = simplejson.dumps({
"html": html
}, cls=LazyEncoder)
return HttpResponse(ajax, mimetype='application/javascript')
而抓住电话的js:
FB.Event.subscribe('edge.create', function(href, widget) {
$.ajax({
type: "POST",
url: "/submissions/add",
data: "href="+href+"&ip={{ IP_ADDRESS }}",
dataType: 'json',
success: function(data){
$("#submissions").html(data["html"])
}
});
return false;
});
我试着用js锁定它,但它也不起作用
<script type="text/javascript">
window.fbAsyncInit = function() {
var maxAjaxCallAllowed=1;
var openAjaxCalls = new Array();
function insertHtml(data){
openAjaxCalls.pop();
$(".list-submissions").html(data["html"])
}
FB.init({appId: '161771113844567', status: true, cookie: true, xfbml: true});
FB.Event.subscribe('edge.create', function(href, widget) {
alert("glos");
if(openAjaxCalls.length < maxAjaxCallAllowed){
openAjaxCalls.push(1);
$.ajax({
type: "POST",
url: "{% url register_vote %}",
data: "href="+href+"&ip={{ IP_ADDRESS }}",
dataType: 'json',
success: function(data){
insertHtml(data);
}
});
}
else{
alert('Server call not possible at this time');
}
});
};
(function() {
var e = document.createElement('script');
e.type = 'text/javascript';
e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
e.async = true;
document.getElementById('fb-root').appendChild(e);
}());
</script>
如果我没有弄错您的问题,我认为您应该在javascript中定义一个全局变量。假设您有一个全局变量busy,该变量应在发送请求后设置,并在请求完成时取消设置 在每次请求之前,您应该检查变量是否已设置,如果已设置,则不要再次发送请求