多个Ajax请求意外的ajaxstart行为

时间:2014-12-22 21:01:21

标签: jquery ajax

我在这样的循环中发送多个Ajax请求

for(var i = 0;i < lines.length;i++){
    $.ajax({
       type: "POST",
       url: "info.php",
       data: {somedata:lines[i]},
       success :function(data){}
   })
}

并使用

$(document).ready(function(){
    $(document).ajaxStart(function(){
        $("#wait").css("display","block");
    });
    $(document).ajaxComplete(function(){
        $("#wait").css("display","none");
    });
});

显示Ajaxloader。但问题是,只要第一个请求通过,加载器就不会出现在下一个请求中,我在这里遗漏了什么吗?

2 个答案:

答案 0 :(得分:1)

您可以添加counter变量,这样加载动画将显示,直到最后一个ajax请求结束,例如:

var counter = 0;

$(document).ajaxStart(function(){
    counter++;
    if(counter)
        $("#wait").css("display","block");
});
$(document).ajaxComplete(function(){
    counter--;
    if(!counter)
        $("#wait").css("display","none");
});

答案 1 :(得分:0)

根据文档

  

描述:注册第一个Ajax请求开始时要调用的处理程序。这是一个Ajax事件。

所以它只被调用第一个请求和

  

(文档)$ .ajaxComplete

我的代码中的

部分等待第一个请求完成,我应该使用

  

(文档)$ .ajaxStop

代替。糟糕的w3schools.com ajaxloader教程!