AJAX调用for循环不会返回值来纠正数组位置

Hei*_*ann 16 javascript ajax jquery

我需要使用AJAX获取一系列页面并将它们放入一个数组中,其中数组中给定的位置等于ifor循环(它是博客页面的类似缓存的函数,以及for循环的范围)是完全可变的).我正在做类似以下的事情:

var bongo = new Array();

for (i = 0; i < 10; i++) {

    jQuery.ajax({ type: "GET", url: 'http://localhost', data: queryString, success: function(request) { bongo[i] = request } })

}
Run Code Online (Sandbox Code Playgroud)

问题是,除非我添加async: false.ajax选项(这将使它... SJAX?),这导致请求基本上暂停浏览器,违背我正在尝试做的事情,我在成功回调总是最终为11,而我当然希望它将返回的数据倒入数组的每个插槽中,从0到10.

我试过用这个代替这行:

bongo[i] = jQuery.ajax({ type: "GET", url: 'http://localhost', data: queryString }).responseText
Run Code Online (Sandbox Code Playgroud)

但这没有任何区别.

Ply*_*ynx 39

你需要一个闭包:

var bongo = [];
for (i = 0; i < 10; i++)
{

  (function(i)
    {
      jQuery.ajax(
        {
          type: "GET",
          url: "http://localhost",
          data: queryString,
          success: function(request) { bongo[i] = request } 
        });  
    })(i);
}
Run Code Online (Sandbox Code Playgroud)

循环是内联函数残留人的第一名.该bongo[i] = result不叫,直到后来.当时的价值i是不同的(很可能是11).如果要"捕获"或"捕获" 当前i,则需要创建新范围.在javascript中执行此操作的唯一方法是使用另一个函数.