我有一个SVG来提供CSV格式的数据。我正在使用d3.js 4.13.0。我遇到过这样的问题:
我的csv变量$ajax_data
如下所示:
date,value
1524805006,1234
1524805012,1235
1524805018,1236
...
当我将变量放入解析函数时:
d3.csvParse(ajax_data, type, function(error, data){
console.log(data);
if (error) throw error;
...
[more processing]
});
我的访问者功能类型定义如下:
function type(d){
d.date = parseDate(d.date);
d.value = +d.value;
return d;
}
var parseDate =d3.timeParse("%s");
当我执行上面的解析函数时,没有任何响应,甚至没有来自console.log(data)
。
即使我将变量转换为字符串也不行:
d3.csvParse(JSON.stringify(ajax_data), type, function(error, data){
console.log(data);
if (error) throw error;
...
[more processing]
});
仍然没有回应...
因此,我使用$ajax_data
中的相同数据进行了测试,并将其放入csv普通文件中,并使用以下解析方法:
d3.csv("ajax_data.csv", type, function(error, data){
console.log(data);
if (error) throw error;
...
[more processing]
});
它没有任何问题,我有完整的数组:
[
{date:xxxx,value:yyyy},
{date:xxxx,value:yyyy},
{date:xxxx,value:yyyy},
...
]
任何了解d3.csvParse
功能的人都可以告诉我出了什么问题吗?
答案 0 :(得分:1)
与d3.csv
不同,d3.csvParse
不需要回调。
它接受一个,因为这是JavaScript:一个函数可以有多个参数而不是参数或参数多于参数......你的代码不会抛出任何错误,因为附加的参数 - 回调 - 只是被忽略了。
所以,应该只是:
var data = d3.csvParse(ajax_data, type);
console.log(data)
//more processing, etc...
这是一个包含您的代码/数据的演示:
var ajax_data = `date,value
1524805006,1234
1524805012,1235
1524805018,1236`;
var parseDate = d3.timeParse("%s");
var data = d3.csvParse(ajax_data, type);
console.log(data)
function type(d) {
d.date = parseDate(d.date);
d.value = +d.value;
return d;
}

<script src="https://d3js.org/d3.v5.min.js"></script>
&#13;