所以我构建了一组在页面内调用的函数。它们都驻留在文件“seeingPlotFunc.js”中,我将其称为html文件体内的一些函数。在开头声明了圆顶全局空数组,但是当调用更新它们的函数时,它们仍然返回空:
seeingPlotFunc.js中的相关代码:
var seeingPlot = seeingPlot || {};
seeingPlot.jsondata1 = [];
seeingPlot.initialData = function () {
d3.json(seeingPlot.initialphp1, function(error1, data1) {
// after getting the data it's parsed into array
data1.forEach(function(d){
d.date = seeingPlot.parseDate(d.date);
d.f_tok = +d.f_tok;
seeingPlot.jsondata1.push(d);
})
})
}
和html文件中的相关代码:
<body>
<script src="http://d3js.org/d3.v3.min.js"></script>
<script language="javascript" type="text/javascript"
src="JS/seeingPlotFunc.js"></script>
<script type="text/javascript">
seeingPlot.initialData();
console.log(seeingPlot.jsondata1);
</script>
</body>
并返回一个空数组。如果我在将所有数据推入数组后立即调用它,则返回正确的值。我花了很长时间一直在用这个敲打我的头......
答案 0 :(得分:0)
我认为d3.json中的函数是异步调用的。所以你需要等待一个回调函数,然后才能获得你的数组。
seeingPlot.initialData = function (OnComplete) {
d3.json(seeingPlot.initialphp1, function(error1, data1) {
// after getting the data it's parsed into array
data1.forEach(function(d){
d.date = seeingPlot.parseDate(d.date);
d.f_tok = +d.f_tok;
seeingPlot.jsondata1.push(d);
})
OnComplete();
})
}
和你的HTML
<body>
<script src="http://d3js.org/d3.v3.min.js"></script>
<script language="javascript" type="text/javascript"
src="JS/seeingPlotFunc.js"></script>
<script type="text/javascript">
seeingPlot.initialData(function ()
{
console.log(seeingPlot.jsondata1);
});
</script>
</body>