我得到一个奇怪的错误,可能来自异步加载我的数据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);
为了简化它,我编辑了很多东西,以简化它。
答案 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之前,这段代码不会运行。