Javascript 使用D3 js读取CSV文件

Javascript 使用D3 js读取CSV文件,javascript,csv,d3.js,Javascript,Csv,D3.js,我认为这可能是一个简单的问题,所以如果这是愚蠢的,请提前道歉 我正试图弄清楚如何使用D3从.csv文件中读取数据。为什么我的变量“dataset”打印到函数中的控制台,但之后不再显示 var dataset; d3.text("https://googledrive.com/host/0B2OWv79OnxJSczZRaTF2N1BuaVE", function(datasetText) { var parsedData = d3.csv.parseRows(datasetText)

我认为这可能是一个简单的问题,所以如果这是愚蠢的,请提前道歉

我正试图弄清楚如何使用D3从.csv文件中读取数据。为什么我的变量“dataset”打印到函数中的控制台,但之后不再显示

var dataset;

d3.text("https://googledrive.com/host/0B2OWv79OnxJSczZRaTF2N1BuaVE", function(datasetText) {

    var parsedData = d3.csv.parseRows(datasetText);
    dataset = parsedData;
    console.log(dataset);
});

console.log(dataset);

这是否意味着我必须在这个d3.text()块中编写所有相关代码?另外,将代码放在这个d3.text()中实际上做了什么

我要回答你先问的第三个问题

将代码放入这个
d3.text()
中实际上做了什么

d3.text
可以传递一个可选的回调函数,根据,在加载文本文件后,该函数用两个参数“错误(如果有)和响应文本”调用。因此,如果您想处理使用
d3.text
加载的文件,一个简单的方法是传递
d3.text
回调函数,该函数将为您执行处理(如您在示例中开始所做的)


回到你的第一个问题

为什么我的变量“dataset”打印到函数中的控制台,但之后不再显示

dataset
在传递给
d3.text的回调函数中只有一个值,这是因为文本文件是异步加载的。这意味着程序流不会停止并等待
d3.text
加载完文本文件,而是继续执行。因此,
dataset
首先被记录为没有示例最后一行中的值,然后在加载后被记录到
d3.text
回调函数中


最后是你的第二个问题

这是否意味着我必须在
d3.text()
块中编写所有相关代码

虽然您不必将所有相关代码放入传递给
d3.text
(例如,您可以使用)的回调中,但这是编写d3代码(以及一般的Javascript代码)的一种非常常见的方法。使代码更清晰的一种方法是按如下方式组织代码:

d3.text("file-name", createChart);
function createChart(datasetText){
    ...
}

在这里,您将在加载数据的不同位置定义回调函数
createChart
,这有时会使代码更易于阅读和使用。

啊,我从未意识到异步加载会如此混乱,谢谢you@Null-用户名:不客气!如果你觉得它解决了你的问题,请告诉我。如果你不介意考虑的话,我还有一个问题。如果我需要同时访问多个.csv文件的数据,我该怎么办?@Null Username:最简单的答案可能是嵌套请求,例如
d3.csv(“file1”,function(data1){d3.csv(“file2”,function(data2){createChart(data1,data2)})
。当我用
d3.text
替换
d3.csv
并添加
“text/csv”
参数:
d3.text(“file1”,“text/csv”,function(data1){d3.text(“file2”,“text/csv”,function(data2){parseData(data1,data2);})时,我的代码开始工作了
这两者之间有什么区别,为什么我在尝试使用d3.csv时会得到
未捕获的TypeError:undefined不是一个函数
?再次感谢您清晰、有用、及时的回答!