【发布时间】:2018-06-06 05:41:29
【问题描述】:
我有一个这样的对象
JSON_DATA = {
"EVENT" : "data/sequence/sequenceEvent.json",
"CHAT" : "data/sequence/sequenceChat.json",
}
我想加载这些值,所以我这样做了
LoadJSON(JSON_DATA, function(data){
var DATA = data;
});
function LoadJSON(jsons, callback){
var counterLoaded = 0;
var counterToLoad = Object.keys(jsons).length;
var parsedData = {};
for(var key in jsons){
ajax.get(jsons[key], "", function(data){
parsedData[key] = JSON.parse(data);
counterLoaded++;
if(counterLoaded == counterToLoad){
callback(parsedData);
}
}, true)
}
}
现在,我知道我有一个闭包问题吗,比如 key 总是最后一个。
但是,我在互联网上搜索,并期望一个 setTimeOut 或这样的函数
function LoadJSON(jsons, callback){
var counterLoaded = 0;
var counterToLoad = Object.keys(jsons).length;
var parsedData = {};
for(var key in jsons){
ajax.get(jsons[key], "", (function(key){
parsedData[key] = JSON.parse(data);
counterLoaded++;
if(counterLoaded == counterToLoad){
callback(parsedData);
}
})(key), true)
}
}
它不起作用,但在我的问题中,我还需要传递参数数据。
我怎样才能做到这一点?
【问题讨论】:
-
您想并行还是串行执行
gets? -
对不起,我不明白你的意思,我想要的只是在 LoadJSON 中最后有这样的 var DATA = {key1 : obj1parsed, key2 : object2parsed}跨度>
标签: javascript ajax loops closures