我最近使用的解決方案工作不壞海事組織。通過一個for循環,我調用了一個方法,該方法依次執行一個window.setTimeout函數,該函數使用正確的數據執行ajax調用。我使用了一個max和counter變量來檢查是否所有的ajax調用都是正確執行的(在成功函數結束時遞增計數器)。如果計數器等於最大值,則檢查另一個setTimeout調用的函數。如果不是,則在新的setTimeout中再次調用該方法,否則調用最後必須執行的函數。
代碼
所以:
var count = 0, max = 0;
function batchCall() {
var a = [{
method: "DoThis",
params: { param1: 1, param2: 2 }
}, {
method: "DoThat",
params: { param1: 3 }
}]
max = a.length;
for (var i = 0; i < max; i++) {
callAjax(a[i]);
}
window.setTimeout(checkAllFinished, 100);
}
function callAjax(o) {
window.setTimeout(function() {
// do ajax call here
}, 0);
}
function checkAllFinished() {
if (count == max) {
// do what you need to do when all are called
}
else {
window.setTimeout(checkAllFinished, 100);
}
}
你不會在jQuery中找到延遲管理器... – Bergi
你看看這裏: http://lostechies.com/joshuaflanagan/2011/10/20/coordinating-multiple-ajax-requests-with -jquery-when/ –
@ eric.itzhak不是專門發佈,但是。並在該帖子的例子中,如果一個getTweets失敗,整個事情將失敗。 – MatteS