d3.json()函数返回undefined

时间:2017-03-09 22:34:32

标签: javascript node.js d3.js

我对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'变量显示为未定义。当我第二次按下按钮时,数据以稳健的方式出现。我该如何解决这个问题?我调试了代码,但我找不到问题

提前致谢,

1 个答案:

答案 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