我必须提出N个ajax请求。每个$ .ajax调用都返回一个Deferred,但也会立即执行ajax请求。我想要做的是获取所有N个请求的延迟,但只是逐步执行(比如通过setInterval循环)。有可能这样做吗?
答案 0 :(得分:1)
浏览器本身会限制对单个服务器发出的并行ajax请求的数量(例如,同时为4或8)。
如果限制不够,您可以建立一个队列并安排一些查询:
var queue = [];
queue.push(function() {
return $.ajax(...);
});
queue.push(function() {
return $.ajax(...);
});
...
然后运行,例如2个查询,每次完成一个,从队列中取出另一个并运行它:
function runNext() {
var fun = queue.shift();
if (fun) {
fun().always(runNext);
}
}
for (var i = 0; i < 2; ++i) {
runNext();
}