我想將加載的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