【问题标题】:reference to iterator is lost when inner $.getJSON is done内部 $.getJSON 完成后对迭代器的引用丢失
【发布时间】:2014-08-10 04:08:40
【问题描述】:

我正在尝试遍历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]);
        }
    });
}

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

【问题讨论】:

  • getJSON 是一个异步调用,因此当您的数据调用正在进行时,循环会移过当前索引
  • 非常感谢。真的很有帮助
  • Hrm.. 我知道这是重复的,但我无法决定最好的...也许this one?
  • 关闭 ajax 后,我遇到了 Uncaught RangeError: Maximum call stack size exceeded

标签: javascript jquery


【解决方案1】:

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

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 在 cmets 中引用的那样,learn how closures work

【讨论】:

    猜你喜欢
    • 2020-09-15
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 2017-12-15
    • 1970-01-01
    • 2015-03-11
    • 1970-01-01
    • 2015-03-24
    相关资源
    最近更新 更多