D3.js加載csv和json數據


1.加載數據的基本命令

D3提供了方法可以對不同的數據類型進行加載,比如d3.text(), d3.xml(), d3.json(), d3.csv(), 和d3.html().

<!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如果不需要的話可省去。

 

2.使用server來server file

在chrome中測試上面的代碼會出現以下錯誤:

XMLHttpRequest cannot load file:/cities.csv. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.

Uncaught NetworkError: Failed to execute 'send' on 'XMLHttpRequest': Failed to load 

這是因為安全機制禁止了cross origin request,不允許直接讀取本地文件, 所以我們需要一個webserver來server我們的數據。

window環境下可以在cmd中執行如下命令(前提是安裝了npm)

nmp install http-server
http-server C:\D3Test

這樣,我們便啟動了一個server, 瀏覽器訪問http://localhost:8080/index.html,然后便可以在console中看到加載的數據。

d3.csv()和d3.json加載數據返回的一個json對象的數組。

 3.異步加載

將上面的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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM