2016-02-12 49 views
0

我一直在這個錯誤上停留了一段時間,我無法解決這個問題。我已經使用php文件將我的d3.js連接到數據庫,並且正在使用散點圖可視化。在連接到php文件一切都很好。下面是相關代碼:d3錯誤數據未定義

d3.json("connection1.php", function(error, data){ 
data.forEach(function(d) { 
    d['TITLE'] = d.TITLE.toString(); 
    d['YEAR'] = +d['YEAR']; 
    d['ABSTRACT'] = d.ABSTRACT.toString(); 
    console.log(d); 
    }) 
}); 

但是,當我這樣做:

// don't want dots overlapping axis, so add in buffer to data domain 
xScale.domain([d3.min(data, xValue)-1, d3.max(data, xValue)+1]); 
yScale.domain([d3.min(data, yValue)-1, d3.max(data, yValue)+1]); 

我收到錯誤

Uncaught ReferenceError: data is not defined 

我是很新的D3所以如果有人可以告訴我如何克服這個錯誤提前謝謝你!

回答

0

請指明你在哪裏使用數據變量。

變量'data'只存在於函數中,並且您無法將其引用到塊之外。

您可以在全局或php響應函數外部聲明一個變量'_data'並將響應'data'複製到它。然後您可以根據需要使用_data變量。瞭解更多關於它的關閉,變量的作用域,全局變量等

var _data; 
d3.json("connection1.php", function(error, data){ 
_data = data; 
_data.forEach(function(d) { 
    d['TITLE'] = d.TITLE.toString(); 
    d['YEAR'] = +d['YEAR']; 
    d['ABSTRACT'] = d.ABSTRACT.toString(); 
    console.log(d); 
    }); 
createGraph(); 
}); 

function createGraph() { 
/* code to create svg and other components goes here */ 
xScale.domain([d3.min(_data, xValue)-1, d3.max(_data, xValue)+1]); 
yScale.domain([d3.min(_data, yValue)-1, d3.max(_data, yValue)+1]); 
} 
+0

這是行不通的,因爲d3.json是一個異步功能和xScale.domain ...首先開火。 – Przemek

+0

我的壞..錯過了構建代碼...編輯上面,謝謝:) –

+2

我會聲明'函數createGraph(data){...}'並從'd3.json'的回調函數中傳入數據。這消除了在外部範圍內聲明'_data'的需要。 – meetamit