d3错误数据未定义

时间:2016-02-12 14:47:51

标签: javascript php d3.js

我一直坚持这个错误一段时间,我无法解决这个问题。我已经使用php文件将我的d3.js连接到数据库,我正在使用散点图可视化。在连接到php文件一切都很好。以下是相关代码:

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的新手,所以如果有人能告诉我如何克服这个错误,请提前谢谢!

1 个答案:

答案 0 :(得分:0)

请指定您在哪里使用数据变量。

变量'数据'仅存在于函数中,并且您无法在块外引用它。

您可以声明变量' _data'全局或在php响应函数之外并复制响应数据'它。然后,您可以根据需要使用_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]);
}