0
我必须提出N个Ajax请求。每个$ .ajax调用都会返回一个Deferred,但也会立即执行ajax请求。我想要做的是得到所有N个请求的Deferreds,但只让它们逐渐执行(比如通过setInterval循环)。是否有可能做到这一点?
我必须提出N个Ajax请求。每个$ .ajax调用都会返回一个Deferred,但也会立即执行ajax请求。我想要做的是得到所有N个请求的Deferreds,但只让它们逐渐执行(比如通过setInterval循环)。是否有可能做到这一点?
浏览器本身会限制向单个服务器发出的并行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();
}
感谢,我结束了做这样的事情(电话之间有超时runNext)。我只是觉得可能有一种方法让Deferred's在没有额外代码的情况下支持这一点。 – 2012-07-05 18:56:20
的确可以 – Esailija 2012-07-05 17:09:47