小编典典

for循环中的AJAX调用不会返回正确的数组位置值

ajax

我需要使用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 } })

}

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

我试过用这个替换行:

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

但这没什么区别。


阅读 299

收藏
2020-07-26

共1个答案

小编典典

您需要关闭:

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做到这一点的唯一方法是使用另一个函数。

2020-07-26