如何存储从文件加载的JSON对象?

时间:2013-05-09 05:44:41

标签: json d3.js

我想将加载的JSON对象存储在变量中。 通常我应该这样做:

d3.json("jsondatafile.json", function(json){ DO SOMETHING; });

但是,相反,我想要类似的东西:

var jsonData = d3.json("jsondatafile.json");

我想在jsonData功能之外访问d3.json。我怎么能这样做?

2 个答案:

答案 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
});

数据集可用于所有后续功能