2013-03-07 12 views
9

私のサイトが最初に初期化されると、サーバに照会してデータを取り戻す。このデータが戻ってくるまで、私はページ上に何も置くことができません。 d3.jsでは、データを取得するのにd3.json()を使用できますが、非同期であるため、ページロジック全体をコールバック関数に入れる必要があります。どのようにデータを要求し、それが戻ってくるのを待つのですか?d3.jsと同期してJSONデータをロードするにはどうすればよいですか?

答えて

4

あなたは基本的に唯一の方法です。コールバック関数は、コードの残りの部分を開始する関数でなければなりません。あなたはコールバック関数ですべてのコードを必要としませんが、間接を導入することはできます。そのため、コールバック関数は、現在コールバック関数内にある別の関数を呼び出します。

4

JavaScriptで同期リクエストを使用することは、スレッド全体をブロックし、その間に何も処理されないため、お勧めできません。また、ユーザーはWebページとうまく対話できません。それは本当にあなたが望むものである場合

は、次の(使用してjQueryの)を行うことができます。

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

を、それが推奨されていませんが、でもjQueryのことで、ここにjQuery.ajax() documentation説明したように:

Ajaxの最初の文字は「非同期」の略で、操作は並行して行われ、完了の順序は保証されません。 $ .ajax()のasyncオプションは、デフォルトでtrueに設定され、要求が行われた後にコードの実行を続行できることを示します。このオプションをfalseに設定すると、ブラウザが応答しなくなる可能性があるため、非同期ではなくコールを非同期にしないことを強くお勧めします。

最後に、success属性にある機能を非同期で使用することを妨げるものはありません。非同期リクエストを使用するように設計を変更する時代の大半は、その価値があります。経験上、同期要求を使用するページをデバッグするのは苦痛です(特に要求が応答されない場合)。

+0

ユーザーはjQueryではなくd3について質問しています – EdgeCaseBerg

+2

フィードバックに感謝します。 OPが要求するのは、同期要求を行う方法です.D3 APIを使用してこれを行うことはできません。なぜなら、これは、実行する方法ではないからです。私の答えは、jQueryを使用して、これを推奨するものではないという大きな免責条項を使ってこれを行う方法を提供します。 jQueryを使用していることをより明確にするために私の答えを編集しました。一般的なケースでは実行すべきではありません。 –

関連する問題