我有一个投票脚本,当我一次投票一个项目时它工作正常,但是当我尽可能快地对许多项目进行投票时,会出现一些故障并停止,我能做些什么来防止这种情况发生?我只想一次执行一个进程,然后等待该进程完成后再执行另一个进程。
$.ajax({
type: 'POST',
dataType: 'json',
url: 'vote/now',
timeout: 15000,
context: this,
data: {
'postid': $(this).attr('data-id'),
'vote': value,
'token': current_token
},
success: function(data,textStatus,jqXHR){
$points.fadeOut(500,function(){
$points.html(data);
$points.fadeIn(500);
});
},
error: function(){
$points.fadeOut(500,function(){
$points.html("Sorry, Try again");
$this.find('button').removeClass('clicked').attr('disabled',false);
$points.removeClass('busy');
$points.fadeIn(500);
});
}
});
最佳答案
用于序列化网络请求的常见习惯用法(不仅仅是 Javascript,而是任何语言)是将参数放入队列或堆栈中,然后一次发送一个。
类似这样的东西(伪代码):
var argumentStack = [];
var isSending = false;
function serialSend(data) {
argumentStack.push(data);
trySend();
}
function trySend() {
if(!isSending && argumentStack.length > 0) {
var data = argumentStack.pop();
isSending = true;
$.ajax(data, success, error);
// in success and error handlers do this:
// isSending = false;
// setTimeout(trySend, 0);
}
}
关于jquery - 防止并发 ajax 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8571853/