在javascript d3.js中使用命名空间时,全局变量未更新

global variable not updated when using namespace in javascript d3.js

本文关键字:全局变量 更新 命名空间 d3 javascript js      更新时间:2023-09-26

所以我构建了一组在页面内调用的函数。它们都驻留在"seeingplotfuncs .js"文件中,我调用它和html文件主体中的一些函数。有在开始时声明的圆顶全局空数组,但是当调用更新它们的函数时,它们仍然返回空:

相关代码见:

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>

,返回一个空数组。如果我在把所有数据压入数组后调用它它会返回正确的值。

我认为函数在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>