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

Javascript 用于多个连续ajax请求的jquery模式,javascript,jquery,ajax,design-patterns,Javascript,Jquery,Ajax,Design Patterns,我有一个带有数组的for-each循环,对于数组中的每个元素,我需要从服务器检索数据,因此我将对每个元素发出ajax请求,并将结果存储在另一个数组中,我需要知道数组中最后一个元素的处理时间,以便显示数据,有没有一种模式,或者我如何做到这一点而不使我认为我正在做的事情过于复杂化 var array = ['a', 'b', 'c'], arrayLength = array.length, completed = 0; 然后,在XHR的回调中 if (completed == a

我有一个带有数组的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(假设为异步),那么它们都将在大致相同的时间尝试请求(我认为),这可能是性能问题。考虑编写一个函数,该函数在每个请求的回调上再次调用,因此XHRs一次生成一个。增加一个计数器,以便在每次调用中为下一个数组元素下标。

对于每次成功的调用,计算成功的结果,然后触发一个事件

例如:

var successfulReturns= 0; 
$.ajax({ 
    url:"", 
    success: function() { 
        successfulReturns++; 
        $(document).trigger("myapp.loadedComplete"); 
    }
}); 
然后倾听你的活动

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

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

具有“并行”模式的连续传递库将很好地抽象这一点。我在用,也看到了它