作爲一個jQuery/D3-小白回到陣,似乎我無法弄清楚如何使這項工作:從d3.json()
supdog = d3.json(dataPath, function(jsondata){
return jsondata;
})
console.log(supdog);
在此先感謝。
作爲一個jQuery/D3-小白回到陣,似乎我無法弄清楚如何使這項工作:從d3.json()
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函數都可能以類似的方式運行。如果他們返回一些東西,它不會是傳遞迴調的返回值。
我知道,這是一個非常古老的職位,但我最近遇到了類似的問題,並找到了以下解決方案,這可能值得分享:
在我的情況下,JSON文件的語法被打破。默認情況下,在這種情況下瀏覽器中不會出現任何錯誤,除非您通過錯誤處理來增強@BertjanBroeksema建議的功能。類似這樣的:
function doSomethingWithData(error, jsondata) {
console.log("error:", error)
console.log(jsondata);
}
這樣你會看到JSON文件的處理是否有問題。
謝謝,但不幸的是,這也將返回「未定義」。 –
你確定你確實得到了結果嗎?即你可以嘗試把console.log()放在函數體中(並把dataFromServer放在那裏)。此外,在jsfiddle.net上展示問題的最小示例將有助於理解您到底在做什麼。 –
是的,一個數組作爲結果給出 –