javascript - 代码在控制台中工作,但在加载网站时不起作用

标签 javascript d3.js nvd3.js

我的代码正在 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")

但是,当我在控制台中调用完全相同的警报时,它工作得很好。

有什么想法吗?

谢谢

乔纳斯

最佳答案

d3.csv 方法发出异步请求,因此在网站版本中,当您尝试访问数据时,有可能 csv 文件尚未完全加载。您可能应该重新组织代码并将依赖于数据的逻辑放入回调函数中。您还可以在数据加载完成时触发一个事件,并让另一个对象监听该事件以开始绘制。

d3.csv('../csv/master.csv', function(error, rows) {
    // The data is available here
    alert(rows[0].agency);
});

有关 docs 中的 d3.csv 的更多信息.

编辑:正如@elclanrs指出的,之前的代码未能解释发布的代码需要重新组织,所以我更新了答案。

关于javascript - 代码在控制台中工作,但在加载网站时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16803392/

相关文章:

d3.js - d3.nest 将键转为字符串值

javascript - d3.js - 以缩写形式在轴上显示大数字

d3.js - NVD3 - 显示空图表而不是 noData 消息

r - 在shiny应用程序中导出rCharts生成的图表

javascript - 故事书无法读取未定义的属性(读取 'type' )

javascript - Safari 扩展中的上下文菜单

javascript - MouseEvent 使用 Ctrl 键单击不起作用

javascript - 如何在 if 语句中引用元素

javascript - D3.js 不附加 HTML

javascript - 应用过滤器时 DC.js 复合图表不更新