0

我们正在尝试从变量(数据)中获取 json 值,并将其作为 json 形式的输入提供给 D3。但它在萤火虫中抛出错误说“未定义data.links”。如果我们使用 d3.json() 函数从 sample.json 文件中获取 json 值,而不是使用变量,则此图表会很好。

下面是示例 json,

{
"nodes": [
    {
        "group": "pepsi",
        "name": "solly",
        "size": 20
    },
    {
        "group": "coke",
        "name": "ROBdey",
        "size": 7
    },
    {
        "group": "limca",
        "name": "Mike",
        "size": 5
    },
    {
        "group": "coke",
        "name": "OFFA",
        "size": 1
    },
    {
        "group": "limca",
        "name": "deuje",
        "size": 1
    },
    {
        "group": "pepsi",
        "name": "EITAKdell",
        "size": 1
    },
    {
        "group": "coke",
        "name": "COOK",
        "size": 1
    },
    {
        "group": "pepsi",
        "name": "CRISLY",
        "size": 1
    }
],
"links": [
    {
        "source": 3,
        "target": 3,
        "value": 1
    },
    {
        "source": 4,
        "target": 4,
        "value": 1
    },
    {
        "source": 7,
        "target": 57,
        "value": 1
    },
    {
        "source": 10,
        "target": 10,
        "value": 1
    },
    {
        "source": 12,
        "target": 332,
        "value": 1
    },
    {
        "source": 14,
        "target": 325,
        "value": 1
    },
    {
        "source": 17,
        "target": 548,
        "value": 1
    },
    {
        "source": 19,
        "target": 157,
        "value": 1
    }
]
}

D3 代码在这里

我们正在尝试使用 jquery 从 mongoDB 的 rest api 调用中检索数据。我们正在使用它,因为从 mongoDB 返回的 JSON 格式未经过优化。

4

1 回答 1

1

根据使用 pastebin 粘贴的代码,虚拟函数如下所示:

function dummy() {
    var form_data = {
        user: "example.com/foo",
        is_ajax: 1
    };
    $.ajax({
        type: "GET",
        url: form_data.user,
        contentType: "application/jsonp",
        dataType: "jsonp",
        jsonp: "jsonp",
        cache: false,
        success: function (data) {
            var t = data.rows[0];
            delete t["_id"];
            markers = JSON.stringify(t);
        }

    });
    return markers;
}

它不起作用,因为不可能从这样的异步调用中返回值。markers当您尝试返回它时未定义。

编辑:

正如 moonwave99 指出的那样,您应该成功回调中处理您的数据:

function dummy() {
    var form_data = {
        user: "example.com/foo",
        is_ajax: 1
    };
    $.ajax({
        type: "GET",
        url: form_data.user,
        contentType: "application/json",
        dataType: "jsonp",
        jsonp: "jsonp",
        cache: false,
        success: function (data) {
            var t = data.rows[0];
            delete t["_id"];
            markers = JSON.stringify(t);

            processMarkers(markers);
        }

    });
}

您应该将大部分全局范围代码移动到processMarkers函数中。此外,dummy不再是此类功能的好名字。

于 2013-08-06T09:44:54.073 回答