我正在尝试使用for
循环遍历一系列URL并将其用于ajax调用。在ajax调用之外,i
正确地更改了值,但是当我尝试从调用内部访问它时,它总是返回2
。它正确循环但具有相同的值,而不是通过0, 1
等循环。
var i = 0;
for(i = 0; i <= 1; ++i) {
console.log("Value outside of call = " + i);
$.ajax({
url : urls[i],
dataType : 'jsonp',
timeout : 3000,
count : 0,
success : function(data) {
console.log("Value inside of call = " + i);
shotInfo[i] = data;
},
error : function() {
}
})
}
我也试过使用while
循环,但效果相同。
答案 0 :(得分:5)
您只有一个变量i
。当回调触发时,它的最终值为2
。
制作a closure。
答案 1 :(得分:2)
在AJAX调用完成后调用回调函数。要防止这种情况,请尝试将async设置为false
{{1}}
答案 2 :(得分:0)
基本上,成功回调发生在AJAX请求完成之后。这可能是个问题。试试这是否有效。
var i = 0;
for(i = 0; i <= 1; ++i) {
console.log("Value outside of call = " + i);
var currentIndex = i;
$.ajax({
url : urls[currentIndex],
dataType : 'jsonp',
timeout : 3000,
count : 0,
success : function(data) {
console.log("Value inside of call = " + currentIndex);
shotInfo[currentIndex] = data;
},
error : function() {
}
})
}