Javascript 排队/限制jQuery ajax请求
我需要在服务器上发出大量ajax请求,然后在完成后运行回调。通常,使用jQuery的Javascript 排队/限制jQuery ajax请求,javascript,jquery,ajax,jquery-deferred,Javascript,Jquery,Ajax,Jquery Deferred,我需要在服务器上发出大量ajax请求,然后在完成后运行回调。通常,使用jQuery的deferred.done()可以很容易地做到这一点。然而,为了避免服务器被淹没,我将请求排队,并每X毫秒触发一个请求 e、 g 问题是,promisesList数组最初是空的,因此done()回调会立即触发,然后,setTimeout()会开始发送ajax请求。有没有一种简单的方法来创建ajax请求,先“暂停”它们,然后使用setTimeout()激发它们 我发现各种节流/队列实现都可以按顺序触发ajax请求,
deferred.done()
可以很容易地做到这一点。然而,为了避免服务器被淹没,我将请求排队,并每X毫秒触发一个请求
e、 g
问题是,promisesList
数组最初是空的,因此done()
回调会立即触发,然后,setTimeout()
会开始发送ajax请求。有没有一种简单的方法来创建ajax请求,先“暂停”它们,然后使用setTimeout()
激发它们
我发现各种节流/队列实现都可以按顺序触发ajax请求,但我很高兴它们可以并行触发,只是延迟一点。首先遇到的问题是
when()
不能以这种方式处理数组。它接受一个任意的承诺列表,因此您可以通过使用以下命令应用数组来绕过它:
$.when.apply(null, promiseList).done(function(){
// Do something
// use the `arguments` magic property to get an ordered list of results
});
第二,节流方法可以使用{delay:timeinsectonds}的$.ajax param完成,但我提出了一个解决方案,该解决方案设置了一个新的延迟,该延迟立即返回(以保持顺序),但在超时后解决
请参阅一个交互式示例
设置超时
具有任意延迟不可选?我使用的是setTimout()
,问题是如何处理延迟的
对象。我猜您需要处理$。当每个请求一部分时。。。或者你等到所有的东西都被发送后再做…(a)我确信$。when()
就是这样工作的!选中,您是正确的,它不接受数组。奇怪的是,这似乎是显而易见的。(b) 我在jQ文档中没有看到ajax请求的delay
param?(c) 你的小提琴太完美了,我没有想到过像那样手动创建$.Deferreds()
。非常感谢!
$.when.apply(null, promiseList).done(function(){
// Do something
// use the `arguments` magic property to get an ordered list of results
});