2013-05-09 39 views
5

我想將加載的JSON對象存儲在變量中。 通常情況下,我應該這樣做:如何存儲從文件加載的JSON對象?

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

但是,相反,我想是這樣的:

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

我要訪問jsonDatad3.json功能之外。我怎樣才能做到這一點?

回答

6

您可以隨時使用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?

5

根據交互式數據可見對於Scott Murray的Web(第74頁),您可以先聲明一個全局變量。在回調函數中,將數據分配給全局變量。

var dataset; // global 

d3.json("file.json", function(data) { 
    dataset = data; 
    //any other functions that depend on data 
}); 

數據集是無濟於事所有後續功能

+3

我有這種方法的問題是,如果您嘗試訪問'了'd3.json'調用後立即dataset',它可能不是所有的都裝但這可能會導致錯誤 – arvi1000 2015-12-08 18:38:36