D3提供了方法能夠對不一樣的數據類型進行加載,好比d3.text(), d3.xml(), d3.json(), d3.csv(), 和d3.html().javascript
<!DOCTYPE html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>test</title> <script type="text/javascript" src="d3.js"></script> </head> <body> <div id="borderdiv"> 123</div> </body> <script> d3.csv("cities.csv", function(data) {console.log(data)}); d3.json("flare.json",function(error,data2) {console.log(error, data2)}); </script> </html>
上面的代碼中加載了一個csv文件和一個json文件,function實際是一個callback,固然其中的error若是不須要的話可省去。html
在chrome中測試上面的代碼會出現如下錯誤:java
XMLHttpRequest cannot load file:/cities.csv. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.node
Uncaught NetworkError: Failed to execute 'send' on 'XMLHttpRequest': Failed to load web
這是由於安全機制禁止了cross origin request,不容許直接讀取本地文件, 因此咱們須要一個webserver來server咱們的數據。chrome
window環境下能夠在cmd中執行以下命令(前提是安裝了npm)npm
nmp install http-server http-server C:\D3Test
這樣,咱們便啓動了一個server, 瀏覽器訪問http://localhost:8080/index.html,而後即可以在console中看到加載的數據。json
d3.csv()和d3.json加載數據返回的一個json對象的數組。數組
將上面的script部分代碼修改以下:瀏覽器
console.log("before csv "); d3.csv("cities.csv", function(data) {console.log(data)}); console.log("before json"); d3.json("flare.json",function(error,data2) {console.log(error, data2)});
執行結果以下:
能夠看到,實際執行順序和代碼中順序並不符合。緣由是d3.csv()和d3.json是異步加載數據的,而加載數據每每比其餘操做須要更多的時間。也是因爲這樣緣由,若是在數據加載完成之間進行數據請求將出現錯誤。
咱們有兩種方法能夠繞開異步加載的問題
第一種:將數據加載和處理嵌套在一塊兒
d3.csv("somefiles.csv", function(data) {doSomethingWithData(data)});
第二種:使用一些helper類庫(queue.js)來實如今數據加載完成後出發相應的操做。
參考:D3.js in Action