0

我正在尝试使用 d3 加载 JSON 数据。我试图生成的数据结构是:

var dataset = [[{"x": 10.2, "y": 120.1}, {"x": 20.2, "y": 20.1},{"x": 30.2, "y": 10.2}, {"x": 40.2, "y": 20.2}]]

我正在使用的 D3/JS 代码如下所示:

var dataset = [[]];
d3.json("/data", function (error, data) {

    for (var i=0;i<data.length;i++) {
        dataset[0].push({"x": data[i].x, "y": data[i].y});
    }
});

当我在控制台中查看结果时,我尝试生成的数据结构如下所示:

dataset = [Array[4]]
dataset[0] = [Object, Object, Object, Object]

我使用上述 D3 函数生成的数据结构如下所示:

dataset = [Array[0]]

当我在回调开始时记录数据时,我得到了这个:

在此处输入图像描述

我可以通过 访问数据console.log(data[0].y);,这给了我 120.1

如何生成将我的 JSON 数据读入正确数据结构的函数?

4

1 回答 1

0

您遇到的问题d3.json()是异步的(jQuery.ajax()默认情况下)。

这意味着dataset将在您收到数据时填充该变量。因此,如果您尝试在dataset不等待接收数据的情况下使用,您将有一个空的dataset.

解决方案是在回调中使用 this 执行所有操作dataset,成功或错误时将调用该回调。例如,如果您需要useDataset()在代码中调用函数,您可以执行以下操作:

变量数据集;
d3.json("/data", function (error, data) {
    //插入错误检查
    数据集=数据;
    使用数据集()
});

如果您想了解有关异步请求和回调的更多信息,jQuery.ajax()文档很棒。

顺便说一句,通过这样做,您可能可以删除用于复制数据的整个功能。

于 2013-09-14T15:09:47.413 回答