d3 json loading error未捕获TypeError:无法读取属性' length'未定义的

时间:2015-06-23 11:47:29

标签: javascript json d3.js

我得到一个奇怪的错误,可能来自异步加载我的数据json文件。

首先,这里有jsfiddle我的代码和硬编码数据。

而不是硬编码我想从json文件加载的数据,如下所示:

var nodes;
d3.json("nodes.json", function(json){
    nodes = json;
});

现在我知道这个代码最终会起作用,因为我可以在这个块中调用我的更新函数并绘制数据。这仍然给我Uncaught TypeError: Cannot read property 'length' of undefined我想避免的。

这是我在chrome中遇到的错误:

Uncaught TypeError: Cannot read property 'length' of undefined
bind @ d3.js:844
d3_selectionPrototype.data @ d3.js:900
update @ example.ts:99
(anonymous function) @ example.ts:280

忘记添加:此行var points = points = plot.selectAll("circle").data(nodes);

发生错误

为了简化它,我编辑了很多东西,以简化它。

2 个答案:

答案 0 :(得分:0)

正在发生这种情况,因为您正在使用

d3.json("nodes.json", function(json){
    nodes = json;
});

这是一个异步通话,因此nodes最初将undefined var nodes;,因为var points = points = plot.selectAll("circle").data(nodes);不提供任何内容。在通话过程中,Cannot read property 'length' of undefined已经运行并抛出错误d3.json("nodes.json", function(json){ //put your complete logic here });

你可以做一件事: -

http://example.com/demo?code={../control-30}

希望有所帮助:)

答案 1 :(得分:0)

你的小提琴不会抛出这个错误。 但是,当您尝试创建圈子时,很可能您的数据尚未准备就绪。将创建圆圈(或依赖于数据)的所有逻辑放入

的回调函数中
d3.json("nodes.json", function(json){
    //PUT CODE HERE
}); 

这应该有效,因为在加载JSON之前,这段代码不会运行。