0

我想将请求延迟几毫秒。

我在 for 循环中执行 3 个 ajax 调用哪个 jquery。for 循环的长度最大为 20。

意味着我在几秒钟内完成了近 60 个请求。在 chrome、firefox、safary 和 opera 中它没有问题,但在 IE 中它中止了请求。

我的 For 循环

for (index in personScoreCollection.collection) {
        //Get the 4th and 5th score simultaniously.
        $.when(UserSearch(index), UsabilityScore(index), UserConnection(index)).done();
    }

所有方法都有一个 ajax 请求。

您可以在此处查看错误,即如何中止请求

图片 http://s24.postimg.org/q0zj3vwhg/Error_Message.jpg

如何使用 java 脚本延迟或保留请求。

4

2 回答 2

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不会调用该函数的回调。

于 2013-04-11T07:49:56.007 回答
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;
}
于 2013-04-11T07:57:04.253 回答