我需要使用AJAX获取一定范围的页面并将它们放入数组中,其中它们在数组中的给定位置等于ifor循环的(这是博客页面的类似于缓存的函数,并且for循环的范围是完全可变的)。我正在做类似以下的事情:
i
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的数组的每个插槽中。
async: false
我试过用这个替换行:
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做到这一点的唯一方法是使用另一个函数。
bongo[i] = result