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