JQUERY/d3-noobとして、私はこれを機能させる方法を理解できないようです:
supdog = d3.json(dataPath, function(jsondata){
return jsondata;
})
console.log(supdog);
前もって感謝します。
JQUERY/d3-noobとして、私はこれを機能させる方法を理解できないようです:
supdog = d3.json(dataPath, function(jsondata){
return jsondata;
})
console.log(supdog);
前もって感謝します。
問題の説明が非常に簡潔であるという事実に加えて、問題は何が何を返すかについてのあなたの仮定にあるようです。
関数 d3.json() は、直接返す非同期関数です (未定義の値を想定しています)。バックエンドからデータを受信したときにのみ、渡したコールバック関数が呼び出されます。明らかにここではコンテキストが異なり、コールバックの戻り値が自動的に d3.json の戻り値になることはありません (これは既に "long" を返しているため)。
あなたがやりたいことは、おそらく次のようなものです:
var jsondata;
d3.json(dataPath, function(dataFromServer) {
jsondata = dataFromServer;
}
console.log(jsondata);
更新 1: 明らかに、上記の例はまだ完全には正しくありません。console.log() への呼び出しは、d3.json() が返された直後に行われます。したがって、サーバーはまだ完全に応答を送信していない可能性があります。したがって、コールバックが返されたときにのみデータにアクセスできます。固定例:
var jsondata;
function doSomethingWithData() {
console.log(jsondata);
}
d3.json(dataPath, function(dataFromServer) {
jsondata = dataFromServer;
doSomethingWithData();
})
(ややばかげていますが)実際の例については、http://jsfiddle.net/GhpBt/10/を参照してください。
更新 2: 上記の例は、コードが実行される順序を示していますが、最も美しいコードの価格に値するものではありません。私自身は、この「グローバル」変数を使用せず、上記の例を単純化して次のようにします。
function doSomethingWithData(jsondata) {
console.log(jsondata);
}
d3.json(dataPath, doSomethingWithData);
匿名の内部関数で個別に呼び出すのではなく、doSomethingWithData が d3.json に直接渡される方法に注意してください。
注:これは d3.js 固有の問題ではありません。基本的に、非同期のすべての JavaScript 関数は、同様の方法で動作する可能性があります。それらが何かを返す場合、それは渡されたコールバックの戻り値ではありません。