我需要使用AJAX来获取一系列页面并将它们放入数组中,其中它们在数组中的给定位置等于for循环的i(这是博客页面的类似于缓存的函数,并且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 } })

}

问题是,除非我将async: false添加到.ajax选项(这将使其成为SJAX?),否则这将导致请求基本上暂停浏览器,这与我要执行的操作相反,即成功回调将始终以11结尾,而我当然希望它将返回的数据从0倒入10的每个插槽中。

我试过用这个替换行:
bongo[i] = jQuery.ajax({ type: "GET", url: 'http://localhost', data: queryString }).responseText

但这没什么区别。

最佳答案

您需要关闭:

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);
}

循环是内联函数使人沮丧的第一名。直到稍后才调用bongo[i] = result。那时i的值是不同的(很可能是11)。如果要“捕获”或“捕获” i的当前值,则需要创建一个新的作用域。用javascript做到这一点的唯一方法是使用另一个函数。

关于javascript - AJAX for循环调用不会返回正确的数组位置值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2405064/

10-16 21:20