0

我必须发出 N ajax 请求。每个 $.ajax 调用都会返回一个 Deferred,但也会立即执行 ajax 请求。我想要做的是为所有 N 个请求获取 Deferreds,但只能让它们逐渐执行(比如通过 setInterval 循环)。是否有可能做到这一点?

4

1 回答 1

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();
}
于 2012-07-05T17:14:00.123 回答