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几乎可以保证是与当前响应一起发送的其他值。