2016-12-05 79 views
0

我嘗試編寫腳本來遍歷對象,並返回那些類型等於HTML中設置的自定義數據類型的腳本。然而,即時通訊無法將變量與對象數組傳遞給我的for循環。你能告訴我在這段代碼中我做錯了什麼嗎?我收到:無法將帶有JSON對象的變量傳遞給循環

無法讀取未定義

PS的特性 '長度'。它在原始的JavaScript來完成,沒有jQuery的

var btn = document.getElementById("btn"); 
var przepisy; 

function findData(data) { 
    var kuchnia = data.dataset.type; 
    var myRequest = new XMLHttpRequest(); 

    myRequest.onreadystatechange = function() { 
     if (this.readyState === 4 && this.status == 200) { 

      przepisy = JSON.parse(myRequest.responseText); 
     } 
    }; 

    myRequest.open('GET', 'js/przepisy.json'); 
    myRequest.send(); 


    for (i = 0; i < przepisy.length; i++) { 
     var results = ""; 
     var obj = przepisy[i]; 
     var type = przepisy.type; 

     if (type === kuchnia) { 

      results += obj.name; 

      document.write(results); 
     } 
    } 
} 
+0

似乎像'przepisy'沒有正確初始化。你能證實嗎? – 31piy

+0

您正試圖在完成之前訪問異步操作的結果。 – Pointy

+0

首先,將您的循環包含在成功回調函數中,以便有一個對象可以查看。第二:'przepisy = JSON.parse(myRequest.responseText);'應該返回一個Object,而不是一個數組。要找出對象中有多少個屬性,使用'Object.keys(przepisy).length'。或者,如果你真的想要獲得一個數組。您需要查看存儲您所尋找的數組的其中一個屬性的對象。 –

回答

3

的問題是,你正在調用你的循環,你取回數據之前,這就是爲什麼長度爲0。您應該只是繼續前進for循環進入你的迴應:

function findData(data) { 
     var kuchnia = data.dataset.type; 
     var myRequest = new XMLHttpRequest(); 

      myRequest.onreadystatechange = function() { 
      if (this.readyState === 4 && this.status == 200) { 

         przepisy = JSON.parse(myRequest.responseText); 

         for(i = 0; i < Object.keys(przepisy).length; i++) { 
          var results = ""; 
          var obj = przepisy[i]; 
          var type = przepisy.type; 

          if(type === kuchnia) { 

           results += obj.name; 

           document.write(results); 
         } 
        } 
      } 
     }; 

     myRequest.open('GET','js/przepisy.json'); 
     myRequest.send(); 



    } 
+0

而且,不要在對象上使用'.length'。使用:'Object.keys(przepisy).length' –

+0

謝謝你非常迅速的回答,錯誤消失了,但現在document.write不會在我運行該函數時觸發。根本沒有結果。這可能是什麼原因? – Ganga

+0

@ScottMarcus感謝您的建議。我更新了答案。 – BlackHatSamurai