我对d3.js中的应用程序逻辑有疑问。我发送一个ajax请求(一些json数据)从客户端到服务器和服务器(nodejs)我保存到一个文件。然后我尝试通过以下命令获取json数据。
d3.json("nodes.json", function(error, json) {
if(error)
{
console.warn('nodes.json error', error);
//throw error;
}
console.log("d3.json");
savedNodesLinks = json;
});
console.log('parsed', JSON.parse(JSON.stringify(savedNodesLinks || null)));
if(JSON.parse(JSON.stringify(savedNodesLinks || null)) != null)
{
links = JSON.parse(JSON.stringify(savedNodesLinks || null)).links;
nodes = JSON.parse(JSON.stringify(savedNodesLinks || null)).nodes;
}
这个包含上述代码片段的函数由一个按钮调用。当我第一次单击该按钮时,'savedNodesLinks'变量显示为未定义。当我第二次按下按钮时,数据以稳健的方式出现。我该如何解决这个问题?我调试了代码,但我找不到问题
提前致谢,
答案 0 :(得分:1)
savedNodeLinks在范围之外使用尝试在saveNodesLinks = json
之后使用您的代码。
因为console.log('parsed', ...
将在实际服务器返回nodes.json文件
d3.json("nodes.json", function(error, json) {
if(error)
{
console.warn('nodes.json error', error);
//throw error;
}
console.log("d3.json");
savedNodesLinks = json;
console.log('parsed', JSON.parse(JSON.stringify(savedNodesLinks || null)));
if(JSON.parse(JSON.stringify(savedNodesLinks || null)) != null)
{
links = JSON.parse(JSON.stringify(savedNodesLinks || null)).links;
nodes = JSON.parse(JSON.stringify(savedNodesLinks || null)).nodes;
}
});
它不是关于d3.js,而是关于javascript异步编程。 查看Introduction to asynchronous JavaScript