将变量分配给AJAX .get调用

时间:2016-07-19 23:07:54

标签: jquery ajax

基于对StackOverflow的一些很好的引用,我知道在$.when()请求完成后使用$.get来触发某些事件。

但如果$.get在for循环中呢?

for (i = 0; i < 5; i++) { 
   $.get()...
}

$.when().done(function(a){
}

所以我想我会将每个变量分配给一个数组:

var d = Array(5);
for (i = 0; i < 5; i++) { 
   d[0] = $.get()...
}

$.when(d).done(function(a){
...
}

但这似乎不起作用。建议的任何替代方案?或者我正在做一些接近正确的事情?

2 个答案:

答案 0 :(得分:1)

不清楚你要问的是什么,但如果你想要汇总所有请求并在完成所有请求后执行一个回调,你就这样做:

apply上使用$.when和一系列请求

var requests = [];
for(var i = 0;i < 5;i++) {
  requests.push($.get(...));
}

$.when.apply(null,requests).then(function() { });

如果.then没有被解雇,那是因为一个或多个$.get请求失败了。试试这个:

$.when
  .apply(null,requests)
  .then(
    function() { console.log('success'); },
    function() { console.log('at least one failed'); }
  );

答案 1 :(得分:0)

你能把done()放在for循环中吗?

for (i = 0; i < 5; i++) { 
   $.get().when().done(function(a){
     ...
   }
}

或者更简单:

for (i = 0; i < 5; i++) { 
   $.get( url, function(a){
      ...
   });
}

在这个例子中,'a'在每个回调实例中都是唯一的。

根据评论

更新

var accumulate; //outside the loop

for (i = 0; i < 5; i++) { 
   $.get( url, function(a){
      accumulate += a;
   });
}
异步http://caolan.github.io/async/docs.html#.parallel

更新

var myTasks = [];
for (i = 0; i < 5; i++) { 
   myTasks.push( function( callback )
      {
         $.get( url, function(a){
           callback( null, a);
         });
      }
}
async.parallel( myTasks, function( err, resultsArray )
{
    // all done
    // aggregate the array as you wish.
});