2016-12-01 55 views
-1

我在同一頁上製作了d3中的兩個條形圖,並且只顯示了第二個條形圖。因此,我用於第二個條形圖的js文件有一個錯誤,即全局變量在一個函數中爲undefined在javascript中未定義的全局變量

var file_name = "story_fandom.tsv"; 
var visData; 

//Step 1. Once every information is loaded to the browser 
$(document).ready(function(){ 

    //Step 2. Load tsv file 
    d3.tsv(file_name, function(error, data) { 
     //If no data found: throw error 
     if (error) throw error; 
     //If the data is loaded successfully, now we are ready to draw things with D3. 
     else{ 
      for(var i=0;i<data.length;i++){ 
       data[i].stories = +data[i].stories; 

      } 
      visData = data; 
      console.log(visData); 
      drawBar(); 

     } 
    }); 
}); 

//Step 5. code drawBar 
function drawBar(){ 

    $(".vis2").empty(); 

    var data = []; 
    for(var i=0;i< visData.length;i++){ 
     temp={}; 
     temp.color = visData[i].color; 
     temp.fandom = visData[i].fandom; 
     temp.amount = visData[i].stories; 
     data.push(temp); 
    } 

這是我的js。第二個js文件是除另一個變量「收藏夾」外相同的格式

全局變量visData在for循環drawBar()中顯示undefined。我的錯誤是什麼?

繼承人的的jsfiddle https://jsfiddle.net/khyatijparekh/dmx2nun7/

+0

確定在分配給'visData'後,你只能從該回調中調用'drawBar()'嗎? – Bergi

+4

不要使用全局變量,而應將'drawBar'作爲'visData'參數並將'data'作爲參數。 – Bergi

+0

該錯誤仍在drawBar()的for循環中。我不明白爲什麼它發生,其他js文件沒有顯示條形圖沒有這個問題。我試着將它作爲參數傳遞,錯誤沒有去 –

回答

0

檢查,如果該文件實際上是傳遞數據。我猜在一種情況下,回調中的數據對象是未定義的。

//Step 2. Load tsv file 
    d3.tsv(file_name, function(error, data) { 
     //New debug line 
     console.log('data is' + data); 
     //If no data found: throw error 
     if (error) throw error; 
     //If the data is loaded successfully, now we are ready to draw things with D3. 
     else{ 
      for(var i=0;i<data.length;i++){ 
       data[i].stories = +data[i].stories; 

      } 
      visData = data; 
      console.log(visData); 
      drawBar(); 

     } 
    });