for循环在Ajax调用中重复返回相同的值

时间:2011-12-28 15:04:44

标签: javascript variables jquery for-loop

我正在尝试使用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循环,但效果相同。

3 个答案:

答案 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() {
        }
    })
}