2017-06-01 190 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

相关问题