2013-04-11 45 views
0

我要推遲幾毫秒的請求。如何延緩for循環

我做的3 Ajax調用它的jQuery當內部爲的loop.that長度環路最多20個。

意味着我做的很少seconds.In瀏覽器,Firefox,safary和歌劇近60個請求卻沒有這個問題,但在IE的中止請求。

我的For循環

for (index in personScoreCollection.collection) { 
     //Get the 4th and 5th score simultaniously. 
     $.when(UserSearch(index), UsabilityScore(index), UserConnection(index)).done(); 
    } 

所有具有一個一個Ajax請求的方法。

你可以看到錯誤,即如何在這裏

image http://s24.postimg.org/q0zj3vwhg/Error_Message.jpg

中止請求,如何延遲或使用Java腳本保持請求。

回答

1

您應該使用.done調用本身觸發下一個批次的AJAX調用:

var keys = Object.keys(personScoreCollection.collection); 

(function next() { 
    if (keys.length) { 
     var index = keys.shift(); 
     $.when(UserSearch(index), 
       UsabilityScore(index), 
       UserConnection(index) 
     ).done(function(a, b, c) { 
        // process results 
     }, next); // recurse 
    } 
})(); // start loop immediately 

的代碼,使所需的按鍵陣列,並且只是在一個時間轉移從陣列的一個鍵,然後做出三個必需的AJAX調用。只有三次都完成後纔開始下一批。

爲了循環,它利用瞭如何通過.done多個回調,每個回調將依次被調用。如果您要反轉這兩個回調,則可以在處理當前一組結果時啓動下一批(異步)提取。

注意,如果任何一個AJAX調用失敗,因爲.done功能的回調將不會被調用這個循環將中止。

0

可以使用setTimeout函數耽誤一些工作。 一個例子:

var ms_pause = 50; // time between request in milliseconds 
var counter = 1; 

for (index in personScoreCollection.collection) { 
    //Get the 4th and 5th score simultaniously. 
    setTimeout((function(context_index){ 
     return function(){ 
      $.when(UserSearch(context_index), UsabilityScore(context_index), UserConnection(context_index)).done(); 
     } 
    })(index), ms_pause * counter); 
    counter += 1; 
}