推迟$ .ajax请求

时间:2012-07-05 17:05:32

标签: jquery jquery-deferred

我必须提出N个ajax请求。每个$ .ajax调用都返回一个Deferred,但也会立即执行ajax请求。我想要做的是获取所有N个请求的延迟,但只是逐步执行(比如通过setInterval循环)。有可能这样做吗?

1 个答案:

答案 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();
}