多个连续ajax请求的jquery模式

时间:2011-04-22 05:50:07

标签: javascript jquery ajax design-patterns

我有一个带有数组的每个循环,对于数组中的每个元素,我需要从服务器检索数据,所以我将为每个元素发出一个ajax请求并将结果存储在另一个数组中,我需要知道何时数组中的最后一个元素已被处理,所以我可以显示数据,是否有模式或我怎么能这样做而不会使我认为正在做的事情过于复杂

3 个答案:

答案 0 :(得分:2)

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一次只能生成一个。递增计数器,以便您可以在每次调用中下标数组元素。

答案 1 :(得分:1)

具有“并行”模式的连续传递库将很好地抽象。我正在使用JooseX-CPS,也看到了tutorial

答案 2 :(得分:0)

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

例如:

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

然后听你的活动

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

这使您可以在循环外的某处测试完成。