我正在尝试将外部json文件加载到d3.js,但每次我尝试将加载的数据分配给变量(以后我可以将它与data();)一起使用,它在console.log中给我未定义。我觉得我尝试了一切,但我不能将数据分配给变量,不知道这里有什么问题。
var dataset
function checkIt(data){
for (var i in data) {
var data_clean;
data_clean = data[i].Total
dataset = data_clean
}
}
console.log(dataset)
d3.json("data.json", checkIt);
数据集
[
{
"Continent":"Europe",
"Country_Names":"Albania",
"Total":3.8
},
{
"Continent":"Europe",
"Country_Names":"Armenia",
"Total":5.4
},
{
"Continent":"Europe",
"Country_Names":"Austria",
"Total":64.7
},
{
"Continent":"Europe",
"Country_Names":"Azerbaijan",
"Total":29.3
}]
答案 0 :(得分:1)
d3.json
是异步的(这意味着checkIt将在未来的事件框架中触发。不在当前事件框架中)。你必须在checkIt函数内部console.log(dataset)
,而不是在它之外。现在调用它的地方是在调用checkIt之前发生的。
答案 1 :(得分:0)
更有效的保存数据的方法是使用localstorage。在实践中,这可以像这样使用:
function save() {
savefile['userList'] = userList
savefile['Users'] = Users
savefile['qwerty'] = qwerty
saved = LZString.compressToBase64(JSON.stringify(savefile))
localStorage.setItem('puppy',saved);
update();
};
function load() {
savefile = JSON.parse(LZString.decompressFromBase64(localStorage.getItem('puppy')))
Users = savefile.Users
userList = savefile.userList
qwerty = savefile.qwerty;
title();
update();
};
function autosave() {
qwerty = qwerty + 1;
save();
setTimeout(autosave, 60000);
update();
}