【问题标题】:d3.JS JSON data import - not in global scoped3.JS JSON 数据导入 - 不在全局范围内
【发布时间】:2016-06-07 13:59:32
【问题描述】:

我有一个 json:

{
    "temp_data": [10,15,20]
}

我正在尝试导入它:

var temp_data;
//Importing from JSON
if(true){
    d3.json("graph.json", function(error, graph) {
        if (error){
            throw error;
        }
        temp_data = graph.temp_data;
        console.log(temp_data);    //works
    });
}

console.log("temp: " + temp_data); //Does not work

问题是,尽管将 temp_data 声明为全局变量,但第二个日志没有显示数据。

【问题讨论】:

标签: javascript json d3.js


【解决方案1】:

传入d3.json()的回调异步运行:https://github.com/d3/d3/wiki/Requests#d3_json

这意味着您的第二个 console.log() 实际运行之前“graph.json”已被检索,因此在您的全局变量被填充之前。您需要在回调中处理这些数据。

【讨论】:

  • 谢谢,我忽略了 d3.json 是异步的。
【解决方案2】:

只是给accepted answer添加一些信息:如果你稍等一下,你可以在回调之外使用你的console.log

setTimeout(function(){
    console.log("Outside the callback: " + temp_data);
}, 1000);      

检查这个插件:https://plnkr.co/edit/zTg6Y6KSVedIBT2tVCu9?p=preview

原因在accepted answer 中已经解释过:由于是异步的,d3.json 下面的代码几乎立即运行,也就是说,它不会等待d3.json 完成。

【讨论】:

  • 谢谢,我忽略了 d3.json 是异步的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-18
  • 2022-01-10
  • 2016-05-06
  • 2016-06-06
  • 2014-04-14
  • 1970-01-01
  • 2011-09-14
相关资源
最近更新 更多