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

Muh*_*min 1 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]);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

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

Ben*_*une 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);
}
Run Code Online (Sandbox Code Playgroud)

正如Jason在评论中引用的那样,了解闭包是如何工作的.