我想将请求延迟几毫秒。
我在for循环中做了3个ajax调用jquery,for循环的长度是20个。
意味着我在几秒钟内做了近60个请求。在chrome,firefox,safary和opera中它没有问题,但在IE中它中止了请求。
My For Loop
for (index in personScoreCollection.collection) {
//Get the 4th and 5th score simultaniously.
$.when(UserSearch(index), UsabilityScore(index), UserConnection(index)).done();
}
所有方法都有一个ajax请求。
你可以看到错误如何在这里中止请求
image http://s24.postimg.org/q0zj3vwhg/Error_Message.jpg
如何使用java脚本延迟或保留请求。
答案 0 :(得分:1)
您应该使用.done
调用本身来触发下一批AJAX调用:
var keys = Object.keys(personScoreCollection.collection);
(function next() {
if (keys.length) {
var index = keys.shift();
$.when(UserSearch(index),
UsabilityScore(index),
UserConnection(index)
).done(function(a, b, c) {
// process results
}, next); // recurse
}
})(); // start loop immediately
代码生成所需键的数组,并且一次只从该数组中移出一个键,然后进行三个必需的AJAX调用。只有当三者都完成后才开始下一批。
要循环,它利用了.done
如何传递多个回调的方式,每个回调都将被调用。如果您要反转这两个回调,实际上可以在处理当前结果集时启动下一批(异步)提取。
请注意,如果任何AJAX调用失败,则此循环将中止,因为不会调用.done
函数的回调。
答案 1 :(得分:0)
您可以使用setTimeout函数来延迟某些工作。 一个例子:
var ms_pause = 50; // time between request in milliseconds
var counter = 1;
for (index in personScoreCollection.collection) {
//Get the 4th and 5th score simultaniously.
setTimeout((function(context_index){
return function(){
$.when(UserSearch(context_index), UsabilityScore(context_index), UserConnection(context_index)).done();
}
})(index), ms_pause * counter);
counter += 1;
}