d3.JS JSON数据导入 - 不在全球范围内

时间:2016-06-07 13:59:32

标签: javascript json d3.js

我有一个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声明为全局变量,但第二个日志未显示数据。

2 个答案:

答案 0 :(得分:3)

传递给d3.json()的回调以异步方式运行:https://github.com/d3/d3/wiki/Requests#d3_json

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

答案 1 :(得分:1)

只是向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光洁度。