我的代码在console中工作,但在加载网站时却没有。
function getData() {
var a = [];
d3.csv("../csv/master.csv").get(function (error, rows) {
for (var i = 0; i < rows.length; i++) {
a.push(rows[i]);
}
});
return a;
}
a = getData();
alert(a[0].agency);
奇怪的是,变量a似乎是由网站加载的,因为我可以在控制台中调用它,但警报会引发错误。
("Uncaught TypeError: Cannot read property 'agency' of undefined")
但是,当我在控制台中调用完全相同的警报时,它可以完美地运行。
有什么想法吗?
谢谢,
纳斯
答案 0 :(得分:4)
d3.csv
方法发出异步请求,因此在网站版本中,当您尝试访问数据时,csv文件可能尚未完全加载。您应该重新组织代码并将依赖于数据的逻辑放在回调函数中。您还可以在数据加载完成时触发事件,并让另一个对象侦听该事件以开始绘制。
d3.csv('../csv/master.csv', function(error, rows) {
// The data is available here
alert(rows[0].agency);
});
docs中有关d3.csv
的更多信息。
编辑:正如@elclanrs指出的那样,之前的代码无法解释所发布的代码需要重新组织,所以我更新了答案。