多个延迟的AJAX响应完成,但也使用迭代变量?

时间:2016-07-20 15:40:58

标签: jquery ajax

我试图

  • 汇总多个$.get请求的结果
  • 根据每个请求的for循环中的计数器插入字符串

第二部分失败,因为我相信多个延迟请求意味着它们运行时,for循环已经完成。

有没有办法传入变量,以便get请求也知道它的i值是什么?

    var requests = [];
    var strings = ["Hi1","Hi2","Hi3","Hi4"]
    var total;
    for (i = 0; i < 4; i++) { 
      requests.push($.get('http://....', function(response) {
          // i here is always 4.
          console.log(i);
          total += response + strings[i];
      });
    }

    $.when.apply(null,requests).then(function() {
       // This works, but all of the strings have "Hi4".
       console.log(total);
    });

1 个答案:

答案 0 :(得分:0)

如果您只需要为每个响应递增计数器,则可以将其作为回调的一部分而不是for循环,因此它会在每次调用返回时递增:

var requests = [];
var strings = ["Hi1","Hi2","Hi3","Hi4"]
var total;
var counter = 0;
for (i = 0; i < 4; i++) { 
  requests.push($.get('http://....', function(response) {
      total += response + strings[counter++];
  });
}

...虽然注意到异步响应不能保证按照您发送的顺序返回;如果每个计数器值都需要与特定请求相对应,那么最好使用该特定值单独处理每个调用(或者可能将计数器值传递给服务器,以便您可以将其作为响应的一部分进行读取。)