for循环中有多个ajax请求

克里斯

如标题所示,我正在for循环中发送多个ajax调用。数组中每个条目一个。

for (var i = 0; i < myArr.length; i++) {

  var request;
  if (window.XMLHttpRequest) {
    request = new XMLHttpRequest();
  } else {
    request = new ActiveXObject("Microsoft.XMLHTTP");
  }
  request.onreadystatechange=function() {
    if (request.readyState === 4 && request.status === 200) {
      outstandingRequests--;
      if (outstandingRequests === 0) { 
        //some processing would happen in here
      } else {
        //be patient as more requests need to return
      }
    }
  }
  request.open("GET","some_ajax_page.php", true);
  outstandingRequests++;
  request.send();
}

发送请求后,当收到响应时,未完成的请求将递增或递减。如果未完成请求为0,那么我们已经从所有请求中返回了。

我的理解是,因为我已var request;在循环体内声明request因此仅在该循环迭代中是局部的。类似地var i = 0;,在for循环中,初始化将意味着i局部于for循环。因此,onreadystatechange在每个请求返回时应调用在处声明的函数

这是正确的,但是只有最后一个请求的areadystate等于4,而astatus等于200,所以outstandingRequests直到最后一个请求返回之前,它才不会递减,因此永远也不会使其减少到0以进行额外的处理。由于每个请求都是一个单独的请求,因此我希望所有请求都应达到readystate4的astatus和200的a。

我尝试过谷歌搜索并在发布之前检查SO的答案,但是大多数都包含jQuery,或者是不同的问题,其中仅发送了一个ajax调用。在我的示例中,我可以看到对服务器的所有预期调用。

我的理解错了吗?还是我理解正确但是却忽略了其他东西。

提前致谢。

昆汀

我的理解是因为我已经声明了var request; 在循环体内,请求仅在循环的该迭代中是本地的。

No.var声明一个具有函数级作用域的变量

您需要let有限支持级范围。

将循环的主体移到一个函数中,然后从循环内部调用该函数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章