Javascript 第一次加载时无法在节点之间形成链接

Javascript 第一次加载时无法在节点之间形成链接,javascript,json,svg,d3.js,Javascript,Json,Svg,D3.js,我在加载页面时使用ajax调用查询数据库以获取json数据,在成功返回时,我调用下面的更新函数。但是,当json数据第一次出现时,节点之间没有形成链接,我需要每次手动刷新页面 这是我通过查询数据库形成的json {"nodes":[{"survey_name":null,"x":100,"y":250,"fixed":true,"question_pkey":0,"survey_pkey":0,"survey_type":0,"question":null,"question_type":0,"

我在加载页面时使用ajax调用查询数据库以获取json数据,在成功返回时,我调用下面的更新函数。但是,当json数据第一次出现时,节点之间没有形成链接,我需要每次手动刷新页面

这是我通过查询数据库形成的json

{"nodes":[{"survey_name":null,"x":100,"y":250,"fixed":true,"question_pkey":0,"survey_pkey":0,"survey_type":0,"question":null,"question_type":0,"ordinal":0,"next_question_pkey":0,"tgId":0,"node_name":"Start"},{"survey_name":"SLinear","x":200,"y":250,"fixed":true,"question_pkey":47,"survey_pkey":6,"survey_type":1,"question":null,"question_type":1,"ordinal":1,"next_question_pkey":1,"tgId":16,"node_name":"c"}],"links":[{"source":0,"target":1}]}
这是包含我的更新函数的脚本

函数更新(json){
var-force=d3.layout.force()
。收费(-120)
.距离(80)
重力(.1)
.nodes(json.nodes)
.links(json.links)
.尺寸([w,h])
.start();
var link=vis.selectAll('line.link')
.data(json.links)
.enter().append('svg:line')
.attr(“类”,函数(d){console.log(“链接”);返回“链接”;})
.style('笔划宽度',3)
.attr(“x1”,函数(d){console.log(“source x--”+d.source.x);返回d.source.x;})
.attr(“y1”,函数(d){console.log(“source y--”+d.source.y);返回d.source.y;})
.attr(“x2”,函数(d){console.log(“target x--”+d.target.x);返回d.target.x;})
.attr(“y2”,函数(d){console.log(“target y--”+d.target.y);返回d.target.y;})
;//此链接部分第一次不起作用,并且在我的节点之间没有形成链接
var node=vis.selectAll(“circle.node”)
.data(json.nodes)
.enter().append(“svg:circle”)
.attr(“类”、“节点”)
.attr(“cx”,函数(d){return d.x;})
.attr(“cy”,函数(d){返回d.y;})
.attr(“r”,7)
.样式(“填充”、“钢蓝”)
。开启(“点击”,点击);
var nodetext=vis.selectAll(“text.label”)
.data(json.nodes)
.enter().append(“svg:text”)
.attr(“类别”、“标签”)
//.attr(“填充”、“红色”)
.attr(“x”、“-5”)
.attr(“dy”,“.35em”)
.text(函数(d){返回d.node_name;});
node.append('svg:title')
.text(函数(d){返回d.name;});
强制开启(“勾选”),功能(e){
控制台日志(“勾选”);
//force.tick();
force.stop();
k=-4*e.alpha;
链接。每个(功能(d){
//k=k+1;
d、 来源:y-=k;
d、 目标y+=k;
});
attr(“x1”,函数(d){返回d.source.x;})
.attr(“y1”,函数(d){返回d.source.y;})
.attr(“x2”,函数(d){返回d.target.x;})
.attr(“y2”,函数(d){返回d.target.y;});
var y=0;
attr(“cx”,函数(d){return d.x;})
.attr(“cy”,函数(d){y=d.y;返回d.y;});
console.log(“y--”+y);
nodetext.attr(“转换”,函数(d){
返回“translate”(“+(d.x-10)+”,“+(d.y+17)+”);
});
});
}
在控制台检查器中,svg由link元素组成,link元素只包含第一个节点的详细信息

请帮助我。我不明白为什么会发生这种情况。

一个工作示例(使用JSFIDLE等)会很有帮助。vis的定义在哪里,它的定义是什么?