当ajax结束时,jQuery继续循环

时间:2014-04-01 13:23:17

标签: javascript jquery ajax loops for-loop

我有一个循环,我希望它在ajax每次循环结束时运行 这可能吗?

  
    

for(var i = 1; i <20; i ++){
      if(keepruning = 1){
    keepruning = 0;

         

$ .post(“getname.php”,{id:myarr [i]})                   .done(function(data){                     keepruning = 1                   });

         

}

  

这就像我得到的那样......但这不起作用 任何帮助都会非常有用;

4 个答案:

答案 0 :(得分:3)

jQuery ajax默认为{async:true},因此请求剂量先前的请求响应 您应该使用$.ajax({...})而不是$.post,以便在参数中添加{async:false} 喜欢

$.ajax({
   url : "xyz.php", 
   async : false,
   dataType : json
   success : function(data){
           //code here
   }
});

您还可以全局添加{async:false}

注意:这适用于在页面

上定义的所有ajax函数
$.ajaxSetup({async:false});

答案 1 :(得分:1)

要按照您尝试的方式执行此操作,您需要一个递归函数,因为默认情况下$ .post是异步的。

(function proceed(i) {
    $.post('getname.php', {id: myarr[i]}).done(function(data) {
        if (++i < 20) proceed(i);
    });
}(0));

但在这之前你应该考虑一下。简单的并行请求不会解决问题吗?

您也可以发出同步请求,但我不建议这样做。

答案 2 :(得分:0)

for (var i=1;i<20;i++){
if (keepruning = 1) {
    keepruning = 0;

    $.ajax({
        url: "getname.php",
        type: "post",
        async: false,
        data:{ id: myarr[i] },
        success: function (data) {
            keepruning = 1;
        },
        error : function (data) {
            keepruning = 0;
        }
    });
}

}

这是一种方式,同步ajax

答案 3 :(得分:0)

使用async : false冻结浏览器,这不是一个好的解决方案。如果它是你的prlbem,你也可以使用自调用函数来进行循环:

loop(0)
function loop(i){
    $.post( "getname.php", { id: myarr[i] } ) .done(function(){
       if(i < 20) loop(i++)
    });
}