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