我正在循環處理幾個項目,併爲它們中的每個項目(使用jQuery)發出ajax請求。我希望它們獨立執行,但是按照它們被調用的順序填充到DOM中,而不是它們返回的順序(出於某種原因某些請求比其他請求花費更長的時間)。關於這種類型的最佳做法的任何提示?在做幾個Ajax回調時維護請求的順序
回答
您可以將所有成功結果對象發送到隊列。有與原始請求一起發送的索引,並不斷檢查該隊列是否存在下一個索引。
但是,通常瀏覽器只允許兩個同時發出的ajax請求,所以在前一個請求成功時發送下一個ajax請求可能是值得的。
這裏的代碼開始:
var results = {}, lastProcessedIndex = 0;
var totalLength = $('a.myselector').each(function(el, index){
$.ajax({
url: $(this).attr('href'),
success: function(result){
results[index] = result; // add to results object
}
});
}).length;
var intervalId = setInterval(function(){
if(results[lastProcessedIndex]){
// use object
lastProcessedIndex++;
}
else if(totalLength == lastProcessedIndex){
clearInterval(intervalId);
}
}, 1000); // every 1 second
是的,我也發現這個jQuery ajax隊列管理器,我認爲基本上你在這裏描述的是:http://www.protofunc.com/scripts/jquery/ajaxManager/ – Chris 2010-12-07 02:37:04
我會採取刺傷在黑暗中與這一個,但它可能的幫助。也許你可以創建一個全局緩衝區數組,然後只要AJAX返回,就可以將結果添加到緩衝區。然後你可以設置一個定時器,當它被觸發時,它將檢查緩衝區的內容。如果它們是爲了它將相應地輸出它。
那麼結果可以以任何未定義的順序返回,它們是異步的並且受到互聯網和服務器的變幻莫測的影響。
你可以做的是用TCP在UDP上做的相同的方式處理這個問題。您使用序列標識符。
保留一個序列標識符,並在每次發送請求時增加它。當請求返回時,請按順序檢查它們,並且僅在它們進來時處理它們。保留一個列表,列出按順序返回的數據,並在每次更新後檢查該列表。當第一個期望進入時,它應該將整個列表處理到第一個缺口。
請記住,您可能會丟失一個請求,因此在忽略給定的序列標識符之前,合適的超時值將按順序排列。
- 1. 請求AVAsset時維護順序
- 2. 定義幾個Ajax調用的順序
- 3. jQuery ajax請求:按請求順序調用的成功函數
- 4. 執行順序Ajax請求
- 5. HOWTO在Struts2應用程序中爲AJAX請求做CSRF保護
- 6. jquery ajax - 維護ajax調用序列
- 7. 保護ajax請求
- 8. 保護AJAX請求
- 9. 做龍捲風AsyncHTTPClient獲取回調調用請求或響應的順序?
- 10. 維護事件回調中的元素順序
- 11. 跨請求維護頁碼
- 12. 順序ajax回調函數
- 13. AJAX請求不做
- 14. 維護jQuery執行順序
- 15. 在Facebook AJAX請求中維護PHP會話
- 16. jQuery插件順序Ajax請求
- 17. 按順序運行ajax請求
- 18. 請求信息在ajax完成回調
- 19. 在javascript ajax請求中回調
- 20. 回調不在Ajax請求中工作?
- 21. 如何處理幾個Ajax請求?
- 22. 如何調試時序問題 - 順序AJAX請求,異步鏈等
- 23. 海量jQuery ajax請求在幾個時間
- 24. 調用每個Ajax請求
- 25. 使用jQuery的AJAX請求回調
- 26. Ajax請求中的Javascript回調函數
- 27. Ajax請求是否保證按發送順序返回?
- 28. 在PHP中通過jquery發送ajax請求時維護$ _SESSION數據?
- 29. 按順序運行兩個ajax請求(僅在成功後調用)
- 30. 在rspec請求規範中維護跨多個獲取請求的會話
連接的請求,以便場每有存儲在內存中的全局位數據(可能附加到「持有格」),並在每個成功調用通用模塊,如果全部成功,將嘗試加載它們。聽起來你將有相當多的互斥體來保存這種設計的模式。 ~~至於最佳做法,請保持代碼清潔和可讀。 – jcolebrand 2010-12-06 21:54:05