2013-05-09 11 views
5

ロードされたJSONオブジェクトを変数に格納します。ファイルから読み込まれたJSONオブジェクトを保存する方法は?

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

は私がd3.json関数の外jsonDataにアクセスしたい:代わりに、私のような何かをしたい、

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

しかし: は、通常、私のような何かを行う必要があります。これどうやってするの?

答えて

6

あなたは常に同期jQuery.ajax()を使用することができます。

var jsonData; 
$.ajax({ 
    dataType: "json", 
    url: "jsondatafile.json", 
    async: false 
    success: function(data){jsonData = data} 
}); 

jQueryのAPIで説明したように、それが推奨されていませんが:

のアヤックスでの最初の文字は、その操作を意味する「非同期」の略並行して行われ、完了の順序は保証されません。 $ .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?

5

インタラクティブ・データヴィスによると、スコット・マレー(Scott Murray)(p 74)によるWebの場合、まずグローバル変数を宣言できます。コールバック関数内で、データをグローバル変数に割り当てます。

var dataset; // global 

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

データセットは、私はこの方法で持っていた問題は、あなたが `dataset`にアクセスしようとした場合、直ちに` d3.json`を呼び出した後、それはすべてがロードされていない可能性があることである後続のすべての機能

+3

に無駄ですそれでもエラーにつながる可能性があります – arvi1000

関連する問題