javascript - d3.json() 函数返回未定义

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

提前致谢,

最佳答案

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/

相关文章:

javascript - 覆盖 Backbone 模型更改事件

node.js - 在nodejs中从stdin读取的正确方法

node.js - 在 AWS Lambda 中使用 Node.js 中的 GraphicsMagick/ImageMagick 包将 JPG 转换为 WebP

javascript - 使用 svg 滤镜 dropshadow 创建响应式 D3 map

d3.js - 使用 D3 操作 Google GeoChart SVG

javascript - AngularJS 等待 $resource 响应设置值

javascript - 我的表单提交被阻止,因为框架是沙盒的并且没有设置 'allow-forms' 权限

javascript - 在函数事件(onChange)中调用函数,来自在Leaflet和Vue.js中创建的Select

node.js - 使用node.js管理sdk使用特定参数列出firebase身份验证用户

javascript - d3.js t.map 不是函数