我想将加载的JSON对象存储在变量中。 通常我应该这样做:
d3.json("jsondatafile.json", function(json){ DO SOMETHING; });
但是,相反,我想要类似的东西:
var jsonData = d3.json("jsondatafile.json");
我想在jsonData
功能之外访问d3.json
。我怎么能这样做?
答案 0 :(得分:6)
您始终可以同步使用jQuery.ajax():
var jsonData;
$.ajax({
dataType: "json",
url: "jsondatafile.json",
async: false
success: function(data){jsonData = data}
});
但是不建议按照jQuery API中的说明进行操作:
Ajax中的第一个字母代表“异步”,意味着操作并行发生,并且无法保证完成顺序。 $ .ajax()的async选项默认为true,表示在发出请求后代码执行可以继续。强烈建议不要将此选项设置为false(从而使调用不再异步),因为它可能导致浏览器无响应。
函数d3.json()
是异步的。因此,在读取data
变量之前,您必须等待接收数据。这就是为什么在处理异步数据时,实践是在d3.json()
函数内做所有事情:
d3.json("temp.json", function(data){
//use data here
})
// do not use data anymore
注意:答案来自我之前的答案:How to import json data in D3?
答案 1 :(得分:5)
根据Scott Murray的网络互动数据访问(第74页),您可以先声明一个全局变量。在回调函数内部,将数据分配给全局变量。
var dataset; // global
d3.json("file.json", function(data) {
dataset = data;
//any other functions that depend on data
});
数据集可用于所有后续功能