2013-05-07 47 views
0

因此,我構建了一組函數以在頁面內調用。它們全部駐留在文件「seeingPlotFunc.js」中,我將其稱爲和html文件正文內的一些函數。有之初宣佈圓頂全球空數組,但是當他們更新的函數被調用,他們仍然會返回空:在JavaScript中使用名稱空間時全局變量未更新d3.js

在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

會不會是在d3.json(seeingPlot.initialphp1,功能(ERROR1,數據1)DATA1和ERROR1不是新的,但預計應該叫錯誤變量和數據??? – user2356839 2013-05-07 04:57:02

回答

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> 
+0

對,您需要回撥。謝謝!我會在我發佈具體解決方案後立即關閉它,但可能需要一段時間。 – user2356839 2013-05-07 06:40:29