Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何指定加载之前JSON数据的正确ID?_Javascript_Jquery_Json - Fatal编程技术网

Javascript 如何指定加载之前JSON数据的正确ID?

Javascript 如何指定加载之前JSON数据的正确ID?,javascript,jquery,json,Javascript,Jquery,Json,我需要为我的每个response值(JSON加载)获取正确的I值。我该怎么做 假设我有10个JSON文件。必须按照正确的顺序加载、存储并向客户显示所有文件 所以它应该是这样的: for (var i = 0; i < files.length; i++) { $.getJSON(files[i], function (response) { console.log(i); console.log(response); }); } for(v

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

假设我有10个JSON文件。必须按照正确的顺序加载、存储并向客户显示所有文件

所以它应该是这样的:

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

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

问题源于这样一个事实,即您的回调在注册时没有超过有效的
i
值;每个回调都会看到同一个
i
实例,循环完成后,该实例的值将与它的值相同(即
files.length

使用jQuery时,明智的做法是使用
$。每个
,正如编码器所说。但用纯javascript解决这个问题的方法是:

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

通过创建并立即调用匿名函数,可以将
i
中的值重新绑定到一个新的局部变量
idx
,该变量的作用域为该函数。然后,每个回调都带有自己的
idx
,因此它最终会记录正确的值(注册回调时的
i
,而不是以后的值)。这正是您使用
$时发生的情况。每个
,因为
每个
都传递了一个匿名函数,该函数接收作为参数的索引。

问题源于这样一个事实,即您的回调在注册时没有超过有效的
i
的值;每个回调都会看到同一个
i
实例,循环完成后,该实例的值将与它的值相同(即
files.length

使用jQuery时,明智的做法是使用
$。每个
,正如编码器所说。但用纯javascript解决这个问题的方法是:

for (var i = 0; i < files.length; i++) {
    (function(idx) {
        $.getJSON(files[idx], function (response) {
            console.log(idx);
            console.log(response);
        });
    })(i);
}
for(var i=0;i
通过创建并立即调用匿名函数,可以将
i
中的值重新绑定到一个新的局部变量
idx
,该变量的作用域为该函数。然后,每个回调都带有自己的
idx
,因此它最终会记录正确的值(注册回调时的
i
,而不是以后的值)。这实际上就是使用
$时发生的情况。每个
都会传递一个匿名函数,该函数将索引作为参数接收。

您的意思是它是“异步的”。基本上,您的代码是在服务器上启动
文件。长度
相当于几乎同步的请求,而不是等待前一个(或多个)完成。当
函数(response)
启动时,
i
i几乎可以保证是当前响应发出时使用的其他值。您的意思是它是“异步的”。基本上,您的代码是在服务器上启动
文件。长度
相当于几乎同步的请求,而不是等待前一个(或多个)完成。当
函数(响应)
启动时,
i
i几乎可以保证是与当前响应一起发送的其他值。