我最近使用的一个解决方案效果不错。通过一个 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);
}
}