2017-06-01 191 views
0

我有一個javascript全局變量的問題,即我有全局變量niz_opcija2,我初始化它在一個函數中,但在其他函數中,它說它是未定義的.. 這是我的javascript:Javascript「無法讀取未定義的屬性長度」bug

var niz_opcija2=[]; 
    window.onload=function(){ 

     ucitaj2(); 
     ucitajKategorije(); 

    } 

    function ucitaj2(){ 
     $.get("/manager/categoriesArticle",function(data){ 
      niz_opcija2.push(data); 
      console.log(data); 
      var select=document.getElementById("select3"); 
      for(var i=0;i<niz_opcija2[0].length;i++){ 
       var option=document.createElement("option"); 
       option.value=niz_opcija2[0][i].categoryCode; 
       option.innerHTML=niz_opcija2[0][i].name; 
       option.id=niz_opcija2[0][i].name; 
       select.appendChild(option); 
      } 
     }); 
    } 

    function ucitajKategorije(){ 

    for(var i=0;i<niz_opcija2[0].length;i++){ 
      var select=document.getElementById("selectKateg"); 
      var option=document.createElement("option"); 
      option.value=niz_opcija2[0][i].name; 
      option.innerHTML=niz_opcija2[0][i].name; 
      option.id=select.length; 
      select.appendChild(option); 
     } 
    } 

(在此代碼我試圖讓數據使用$不用彷徨JSON,並將其添加到選擇列表select3selectKateg和ucitaj2()函數獲取數據,但ucitajKategorije是不是,但我認爲它應該工作是一樣的?)有誰知道可能是什麼問題?提前致謝!

+0

最有可能的事實,你是異步分配值到您的變量,而你做你的其他功能運行,您的變量仍然沒有數據在裏面。 – Lixus

+0

'$ .get'是異步的,這意味着在第二個方法被調用時,它不會完成獲取數據和填充列表。我建議查看Promise或回調 – Hamms

+0

從'.length'驗證中移除'[0]'。它給你這個錯誤,因爲它沒有存儲在_position 0_中。 – doutriforce

回答

0

問題發生是因爲您的初始化niz_opcija2發生在異步函數調用中。

ucitaj2$.get("/manager/categoriesArticle"之前立即返回數據從服務器返回。

更改調用它在get更迭功能:

var niz_opcija2=[]; 
window.onload=function(){ 

    ucitaj2(); 

} 

function ucitaj2(){ 
    $.get("/manager/categoriesArticle",function(data){ 
     niz_opcija2.push(data); 
     console.log(data); 
     var select=document.getElementById("select3"); 
     for(var i=0;i<niz_opcija2[0].length;i++){ 
      var option=document.createElement("option"); 
      option.value=niz_opcija2[0][i].categoryCode; 
      option.innerHTML=niz_opcija2[0][i].name; 
      option.id=niz_opcija2[0][i].name; 
      select.appendChild(option); 
     } 

     //Call it here 
     ucitajKategorije(); 
    }); 
} 
+0

謝謝,它現在有效! – slomilll

相關問題