Javascript d3.js读取数据集的问题

Javascript d3.js读取数据集的问题,javascript,jquery,d3.js,svg,Javascript,Jquery,D3.js,Svg,我试图解决这个错误,因为2天了,现在不知道如何解决这个问题。我在尝试向可视化添加数据时遇到了这个错误 未捕获类型错误:无法读取未定义的属性“长度” 这似乎与数据集有关。但无论我做什么,如果我在checkit函数(见下文)之外输入console.log dataset,它返回未定义的数据,就会出现此错误 资料 代码 d3.json(“data.json”,checkIt)是一个异步操作()。简而言之,这意味着在代码执行的某个时刻,dataset变量实际上是未定义的。后来,它被定义了,但为时已晚 这

我试图解决这个错误,因为2天了,现在不知道如何解决这个问题。我在尝试向可视化添加数据时遇到了这个错误

未捕获类型错误:无法读取未定义的属性“长度”

这似乎与数据集有关。但无论我做什么,如果我在checkit函数(见下文)之外输入console.log dataset,它返回未定义的数据,就会出现此错误

资料

代码

d3.json(“data.json”,checkIt)是一个异步操作()。简而言之,这意味着在代码执行的某个时刻,
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...

移动d3.json(“data.json”,选中它)后;在代码的最后一个位置,我仍然得到这个错误。我认为这是因为var数据集无法在checkit函数之外获取数据,不知道如何做,请尝试将“var svg=…”所有这些块放入“checkit”函数。这就是主要的建议。在那之后,我得到了这个未捕获的错误类型错误:d3.select(…).selectAll(…).data(…).enter(…).attr不是一个函数。在这个错误之前,您在控制台中得到了什么?您的数据“dataset”是数组吗?我不认为dataset是数组,因为(当console.log from outside for loop)从数据中只返回一个(json文件中的最后一个值),这可能是导致问题的原因。而函数内部的console.log(dataset)返回一个数组
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()
    });
  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...