Javascript for循环中的多个ajax请求

Javascript for循环中的多个ajax请求,javascript,ajax,Javascript,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.onrea

正如标题所述,我在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();
}
for(变量i=0;i
发送请求时,未完成的请求在收到响应时递增和递减。如果未完成的请求为0,则我们已从所有请求返回

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

这是正确的,但是只有最后一个请求的
readystate
值为4,而
status
值为200,因此在最后一个请求返回之前,
未完成的请求
不会被递减,因此在进行额外处理时也不会使其返回到0。由于每个请求都是一个单独的请求,我希望所有请求都应该达到
readystate
4和
status
200

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

我的理解错了吗?或者我理解正确,但忽略了其他东西

提前谢谢

我的理解是,因为我已经声明了var请求;在循环体内部,请求将仅对循环的该迭代是局部的

否。
var
声明了一个具有函数级别范围的变量

对于级别范围,您需要
let
()


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

要使ajax调用同步,以便下一次调用将等到第一次调用完成,否则使用AjaxQ没有必要,Quentin有正确的答案-javascript没有块作用域,它有功能scope@KarthickKumar-不,不要那样做@Quentin,谢谢你的updatecheck,这可能会帮助你,谢谢,但是看起来已经放弃了对let块级别的支持。@Chris-你需要明确声明你也在使用JS 1.7。将循环体移到函数中。现在,将循环体移到函数中会使我的代码按预期反应。谢谢,也谢谢你消除了我的误解。我确实对你的答案投了赞成票,但我没有名声,所以它没有表现出来。