6

読み込まれた JSON オブジェクトを変数に格納したいと考えています。通常、私は次のようなことをする必要があります:

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

しかし、代わりに、次のようなものが欲しいです:

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

関数jsonData外にアクセスしたい。d3.jsonこれどうやってするの?

4

2 に答える 2

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?

于 2013-05-09T05:47:05.120 に答える
5

Scott Murray による Web 用の Interactive Data Vis (p 74) によると、最初にグローバル変数を宣言できます。コールバック関数内で、データをグローバル変数に割り当てます。

var dataset; // global

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

データセットは、後続のすべての関数で利用できます

于 2014-09-02T17:55:36.447 に答える