AJAX-等到响应再进行下一次AJAX调用之前

问题描述:

我做了一个函数,它循环遍历每个div标签,class =“health_report”,对于每个div,它都进行AJAX调用。唯一的问题是它使得50个AJAX调用(假设我有50个DIV标签)立即生效。这样可以,但为了我的目的,我需要等到第一个AJAX调用完成(成功功能被触发)后才能移动到下一个DIV标签。继承人的代码:AJAX-等到响应再进行下一次AJAX调用之前

$('.health_report').each(function(i, obj) { 
    // FIRST AJAX CALL 
    generateHealthReport(); 
}); 

    function generateHealthReport(fileID,filter,slug,reportID,importance,reputation) { 

     $.ajax({ 
      type: "POST", 
      url: ajaxurl, 
      data: { 
       "action": 'generateHealthReport' 
      }, 
      dataType: "html", 
      success: function (returnData) { 
       // do something 

      } 
     }); 
    } 

因此,一些我想这应该工作是增加一个定时器循环

我怎样才能使它如此循环(使用jQuery的叫计时http://creativecouple.github.io/jquery-timing/

所以代码变成了这样:

$('.health_report').each($).wait(3000,function(i, obj) { 
    // FIRST AJAX CALL 
    generateHealthReport(); 
}); 

循环现在暂停迭代3之间秒,这给人的第一AJAX调用一次循环移动到NE前完成xt DIV标签。这使得AJAX调用以我需要的方式发生,但由于某种原因它出现了问题,有时候返回的HTML响应只是应该返回的HTML的一部分。有没有另一种方法来做到这一点?我如何让循环暂停,直到它完成的AJAX调用完成?

+1

异步设置为false。 http://stackoverflow.com/questions/6685249/jquery-performing-synchronous-ajax-requests,这样在提交另一个之前,它会简单地等待。 – Hozikimaru

您可以使用ajaxComplete或选项从ajax完整:

$.ajax({ 
    type: "POST", 
    url: ajaxurl, 
    data: { 
     "action": 'generateHealthReport' 
    }, 
    dataType: "html", 
    success: function (returnData) { 
     // do something 

    } 
    complete: function() { 
     // This is called after completion of Ajax. 
     // nextAjax(); 
    } 
}); 
+0

.each循环在移动到下一次迭代之前是否会等待完整的函数? –

+0

你不能在Javascript中等待。完成后您必须调用下一个Ajax。 – lilezek