我想了解如何使用官方API文檔中指定的訪問器和回調函數來使用d3.csv(url [,accessor] [,callback]) (請參閱點1的鏈接)。免責聲明:我是d3.js的新手。d3.js使用訪問器函數和回調導入csv
TL,WR:在調用console.log(data)命令時,我在回調函數中得到一個空的控制檯響應,並在應該保存數據的變量上調用console.log時得到未定義。
我發現了兩個簡單的例子來了解它是如何工作的。
- API本身有一個例子:Chart-data at tonygarcia.me
要執行這些我已經創建既爲代碼的HTML文件,然後使用一個CSV文件:d3.js API at github.com
python -m SimpleHTTPServer 8888 &
啓動一個簡單的服務器。 案例1:API官方文檔。
在HTML:
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="http://mbostock.github.com/d3/d3.js">
</script>
</head>
<body>
<script type="text/javascript">
var datas;
d3.csv("example.csv", function(d) {
return {
year: new Date(+d.Year, 0, 1), // convert "Year" column to Date
make: d.Make,
model: d.Model,
length: +d.Length // convert "Length" column to number
};
}, function(error, rows) {
console.log(rows);
datas = rows;
});
</script>
</body>
</html>
的CSV(example.csv):
Year,Make,Model,Length
1997,Ford,E350,2.34
2000,Mercury,Cougar,2.38
在控制檯上的輸出(空),然後:
> console.log(datas);
undefined VM2228:2
undefined
預期結果:
[
{"Year": "1997", "Make": "Ford", "Model": "E350", "Length": 2.34},
{"Year": "2000", "Make": "Mercury", "Model": "Cougar", "Length": 2.38}
]
情況2:圖表數據在tonygarcia.me
在HTML:
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="http://mbostock.github.com/d3/d3.js">
</script>
</head>
<body>
<script type="text/javascript">
var datas;
// load data from a CSV file
d3.csv('home.csv',
function(d) {
return {
key: d.state,
value: +d.value
};
}, function(dataset){
// code to generate chart goes here
datas = dataset;
console.log(dataset);
});
</script>
</body>
</html>
的CV(home.cvs):
state,value
Alabama,71.6
Alaska,22.4
Arizona,147.5
Arkansas,59.9
<truncated>
在控制檯上的輸出(空)然後:
> console.log(datas);
undefined VM2265:2
undefined
預期的結果(你可以嘗試在網頁上):
那麼,我究竟做錯了什麼?如果我只使用沒有訪問器的回調函數,那麼一切正常。使用訪問器將數據從sting格式化爲f.e是很有趣的。數。
謝謝大家的幫助!
最佳,
邁克爾
編輯:更正:tonygarcia.com - > tonygarcia。我
我確認你上面說的。複製你的代碼和csv,一切和你說的一樣。 – VividD
我試着從託尼加西亞網站加載d3.v3.min.js到你的例子,它沒有改變任何東西。 – VividD
我也試過,得到了同樣的結果。這就排除了版本不兼容的問題,因爲我們使用與他相同的d3.js代碼。我真的不明白髮生了什麼事。它可能是關於python服務器嗎? – mgp