用于多个连续ajax请求的jquery模式



我有一个带有数组的for each循环,对于数组中的每个元素,我需要从服务器检索数据,所以我会对每个元素发出ajax请求,并将结果存储在另一个数组中,我需要知道数组中的最后一个元素何时处理完毕,以便显示数据,有没有一种模式,或者我如何在不使事情过于复杂的情况下做到这一点,我认为这就是我正在做的

var array = ['a', 'b', 'c'],
    arrayLength = array.length,
    completed = 0;

然后,在XHR的回调中,

if (completed == arrayLength) {
   // All of them have finished.
}
completed++;

或者,您声明您正在将这些东西添加到一个新数组中。假设完成后数组的长度相等,则可以将回调中的检查更改为(startArray.length == newArray.length)

此外,请记住,如果您在循环中进行XHR(假设异步(,它们将大致同时尝试请求(我认为(,这可能是性能问题。考虑编写一个函数,在每个请求的回调中再次调用该函数,这样XHR就可以一次生成一个。增加一个计数器,以便在每次调用中为下一个数组元素添加下标。

一个具有"并行"模式的延续传递库将很好地抽象这一点。我正在使用JooseXCPS,也可以参阅它的教程。

对于您命中的每个成功,计算成功结果,然后触发一个事件。

例如:

var successfulReturns= 0; 
$.ajax({ 
    url:"", 
    success: function() { 
        successfulReturns++; 
        $(document).trigger("myapp.loadedComplete"); 
    }
}); 

然后收听您的活动

$(document).bind("myapp.loadedComplete", function() {  } );

这可以让您在循环之外的某个地方测试完成情况。

最新更新