2011-04-22 16 views
4

我有一個數組的每個循環,對於數組中的每個元素我需要從服務器檢索數據,所以我會爲每個元素髮出一個ajax請求並將結果存儲在另一個數組中,我需要知道什麼時候陣列中的最後一個元素已經被處理,所以我可以顯示數據,是否有一個模式,或者我怎樣才能做到這一點,而不是過於複雜的事情,我認爲是我在做什麼多個連續ajax請求的jquery模式

+0

任何代碼? – 2011-04-22 05:53:40

回答

2
var array = ['a', 'b', 'c'], 
    arrayLength = array.length, 
    completed = 0; 

然後,在你XHR的回調,

if (completed == arrayLength) { 
    // All of them have finished. 
} 

completed++; 

阿爾特事實上,你聲明你將這些東西添加到一個新的數組中。假設完成後陣列長度相等,您可以將回調中的支票更改爲(startArray.length == newArray.length)。另外,請記住,如果你正在循環中製作XHR(假設爲異步),他們都會嘗試大致同時請求(我認爲),這可能是性能問題。考慮編寫一個函數,這個函數會在每個請求的回調函數中被再次調用,所以XHR是一次一個的。增加一個計數器,這樣你可以在每個調用中爲下一個數組元素下標。

0

對於每一次成功,您點擊,數出成功的結果,然後觸發一個事件。

例如:

var successfulReturns= 0; 
$.ajax({ 
    url:"", 
    success: function() { 
     successfulReturns++; 
     $(document).trigger("myapp.loadedComplete"); 
    } 
}); 

,然後聽爲您的活動

$(document).bind("myapp.loadedComplete", function() { }); 

這可以讓你的地方測試循環之外完成。

+3

請格式化您的代碼:) – 2011-04-22 06:10:44

1

具有「並行」模式的延續傳遞庫將很好地抽象出來。我正在使用JooseX-CPS,也請參閱其tutorial