我已经在这个错误上停留了一段时间,我无法解决它。我已经使用 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 很陌生,所以如果有人可以告诉我如何克服这个错误,请提前感谢您!
请指定您在何处使用数据变量。
变量"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]);
}