我对 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”变量显示为未定义。当我第二次按下按钮时,数据就会以可靠的方式出现。我该如何解决这个问题?我调试了代码,但找不到问题
提前致谢,
最佳答案
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
关于javascript - d3.json() 函数返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42706816/