d3.js无法将加载的json数据分配给变量

时间:2015-11-05 23:47:01

标签: javascript json d3.js

我正在尝试将外部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
  }]

2 个答案:

答案 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();
}