jquery - 防止并发 ajax 请求

标签 jquery ajax

我有一个投票脚本,当我一次投票一个项目时它工作正常,但是当我尽可能快地对许多项目进行投票时,会出现一些故障并停止,我能做些什么来防止这种情况发生?我只想一次执行一个进程,然后等待该进程完成后再执行另一个进程。

$.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/

相关文章:

javascript - 即使表格切换为不可见,粘性标题也会出现在滚动上

javascript - 在导航栏中放置一个文本横幅

javascript - jquery - ajax 请求不工作

javascript - 这种 Ajax 方法适用于许多浏览器和操作系统吗?

php - jquery AJAX实时获取新的mysql记录

Jquery - 将 event.data 传递给 .on() 和 .bind()

javascript - 如何在 Ajax 中验证序列化数据

javascript - jQuery - 在 mouseenter 之后保持另一个元素打开

javascript - 创建一个类似 Flipboard 弹出窗口的 Jquery 动画

Javascript 异步和同步 ajax 操作