d3.js阅读数据集的问题

时间:2015-11-08 22:05:53

标签: javascript jquery d3.js svg

我试图解决这个错误,因为2天后现在还不确定如何解决这个问题。我试图将数据添加到可视化

时出现此错误

未捕获的TypeError:无法读取未定义的属性“长度”

这似乎与数据集有关。但无论我做什么,如果我在checkit函数之外的console.log数据集(见下文),我会得到这个错误,它返回undefined。

数据

[ {
    "Continent":"Asia.Oceania",
    "Country_Names":"Viet Nam",
    "Total":142.9
  },
  {
    "Continent":"Asia.Oceania",
    "Country_Names":"Yemen",
    "Total":20
  },
  {
    "Continent":"Misc",
    "Country_Names":"World marine bunkers",
    "Total":602.2
  },
  {
    "Continent":"Misc",
    "Country_Names":"World aviation bunkers",
    "Total":477.8
  }
]

var svg_0 = d3.xml("drawing.svg", "image/svg+xml", function(xml) {
    var importedNode = document.importNode(xml.documentElement, true);
    d3.select("#viz").node().appendChild(importedNode);



var dataset;

function checkIt(data){
for (var i in data) {
            var data_clean;
            data_clean = data[i].Total
            dataset = data_clean
            console.log(dataset) //returns data
        }

        }
    console.log(dataset)//returns undefined


    d3.json("data.json", checkIt);


    var svg =  d3.select("#level_0")
                .selectAll("path")
                .data(dataset)
                .enter()
    });

1 个答案:

答案 0 :(得分:2)

d3.json("data.json", checkIt);是异步操作(check syntax here for example)。简而言之,这意味着在代码执行的某个时刻dataset变量实际上是尚未定义。然后,它被定义,但为时已晚。

这意味着您需要确保在开始使用数据集时定义了数据集。例如,您可以将用法移动到checkIt回调,如下所示:

  var dataset;
    function checkIt(data){
     var data_clean = []; //prepared variable for clear data
    for (var i in data) {
      data_clean.push(data[i].Total);
      }
  //move initialisation here, to be sure dataset is there
  var svg =  d3.select("#level_0")
               .selectAll("path")
               .data(data_clean);  
  }
//other code here...
d3.json("data.json", checkIt);
//other code here...