Javascript 函数的作用是:返回未定义的
我对d3.js中的应用程序逻辑有一个问题。我从客户端向服务器发送一个ajax请求和一些json数据,并在servernodejs中保存到一个文件中。然后,我尝试通过以下命令获取json数据Javascript 函数的作用是:返回未定义的,javascript,node.js,d3.js,Javascript,Node.js,D3.js,我对d3.js中的应用程序逻辑有一个问题。我从客户端向服务器发送一个ajax请求和一些json数据,并在servernodejs中保存到一个文件中。然后,我尝试通过以下命令获取json数据 d3.json("nodes.json", function(error, json) { if(error) { console.warn('nodes.json error', error); //throw
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;
}
这个包含上述代码段的函数由一个按钮调用。当我第一次单击按钮时,“SavedNodeLink”变量显示为未定义。当我第二次按下按钮时,数据以一种健壮的方式出现。如何解决此问题?我调试了代码,但找不到问题
提前感谢,savedNodeLinks在作用域之外使用。请尝试在saveNodesLinks=json之后立即使用代码 因为console.log“已解析”。。。将在服务器实际返回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异步编程。
检查d3.json调用是异步的,这意味着它不能立即获取json。当json可用时,将调用console.logd3.json所在的函数。在这一点上,它是可用的。同时,d3.json之后的console.log调用在json可用之前被调用,因此尚未定义SavedNodeLink。我建议阅读javascript中的异步调用以更好地理解这一点。什么意思?在saveNodesLinks=json之后立即尝试使用您的代码?