内部$ .getJSON完成后,对iterator的引用将丢失

时间:2014-06-19 14:55:11

标签: javascript jquery

我正在尝试遍历所有highchart个系列,同时对服务器执行ajax。我们来看看下面的代码

var url = './sheet';
for(var k = 0; k < chart.series.length; k++) {                      
    console.log(chart.series[k]);
    $.getJSON(url).done(function (data){
        if (data.length) {                              
            console.log(chart.series[k]);
        }
    });
}

我不确定上面的代码有什么问题。如您所见,k完成后,对jQuery.getJSON的引用将丢失。感谢您能否帮助我。谢谢

1 个答案:

答案 0 :(得分:5)

您的代码是异步的,将其包装在一个闭包中,以便它在循环中保留它的值。

var url = './sheet';
for(var k = 0; k < chart.series.length; k++) {                      
    (function(k){
        console.log(chart.series[k]);
        $.getJSON(url).done(function (data){
            if (data.length) {                              
                console.log(chart.series[k]);
            }
        });
    })(k);
}

正如Jason在评论中引用learn how closures work