我想将加载的JSON对象存储在变量中。 通常情况下,我应该这样做:如何存储从文件加载的JSON对象?
d3.json("jsondatafile.json", function(json){ DO SOMETHING; });
但是,相反,我想是这样的:
var jsonData = d3.json("jsondatafile.json");
我要访问jsonData
的d3.json
功能之外。我怎样才能做到这一点?
我想将加载的JSON对象存储在变量中。 通常情况下,我应该这样做:如何存储从文件加载的JSON对象?
d3.json("jsondatafile.json", function(json){ DO SOMETHING; });
但是,相反,我想是这样的:
var jsonData = d3.json("jsondatafile.json");
我要访问jsonData
的d3.json
功能之外。我怎样才能做到这一点?
您可以随时使用jQuery.ajax()同步:
var jsonData;
$.ajax({
dataType: "json",
url: "jsondatafile.json",
async: false
success: function(data){jsonData = data}
});
但是不推荐在jQuery的API解释说:
Ajax中的第一个字母代表“异步”,这意味着操作并行发生,并且不能保证完成的顺序。 $ .ajax()的异步选项默认为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?
根据交互式数据可见对于Scott Murray的Web(第74页),您可以先声明一个全局变量。在回调函数中,将数据分配给全局变量。
var dataset; // global
d3.json("file.json", function(data) {
dataset = data;
//any other functions that depend on data
});
数据集是无济于事所有后续功能
我有这种方法的问题是,如果您尝试访问'了'd3.json'调用后立即dataset',它可能不是所有的都装但这可能会导致错误 – arvi1000 2015-12-08 18:38:36