2015-10-05 64 views
0

我做了一個函數,它循環遍歷每個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

回答

1

您可以使用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