Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 函数的作用是:返回未定义的_Javascript_Node.js_D3.js - Fatal编程技术网

Javascript 函数的作用是:返回未定义的

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.js中的应用程序逻辑有一个问题。我从客户端向服务器发送一个ajax请求和一些json数据,并在servernodejs中保存到一个文件中。然后,我尝试通过以下命令获取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;
    }
这个包含上述代码段的函数由一个按钮调用。当我第一次单击按钮时,“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之后立即尝试使用您的代码?