如何指定JSON数据的正确ID而不是我加载?

时间:2013-02-16 04:22:45

标签: javascript jquery json

我需要为每个i值(JSON加载)获取正确的response值。我该怎么做?

假设我有10个JSON文件。所有这些都必须按正确的顺序加载,存储和显示给客户端。

所以看起来应该是这样的:

for (var i = 0; i < files.length; i++) {
    $.getJSON(files[i], function (response) {
        console.log(i);
        console.log(response);
    });
}

response的结果是我们所期望的 - 文件的内容,但变量i似乎总是相同(= files.length)。我对此的解释是,JS不是一种等待特定操作完成的语言,它可以同时执行大量操作(忘记了科学名称)。

1 个答案:

答案 0 :(得分:5)

问题源于这样一个事实:你的回调不是关闭注册时有效的i值;每个回调都会看到i的相同实例,最终会得到循环完成后的值(files.length)。

使用jQuery做的明智之处是使用$.each作为编码器说。但是用纯javascript解决它的方法是:

for (var i = 0; i < files.length; i++) {
    (function(idx) {
        $.getJSON(files[idx], function (response) {
            console.log(idx);
            console.log(response);
        });
    })(i);
}

通过制作,然后立即调用匿名函数,您将i中的值重新绑定到一个名为idx的新局部变量,该变量作用于该函数。然后每个回调都会携带自己的idx,因此最终会记录正确的值(注册回调时i是什么,而不是之后的回调。这实际上正是您使用$.each时发生的情况,因为each传递了一个接收索引作为参数的匿名函数。