2017-10-15 72 views
0

這裏的樣本JSON數據通過從本地JSON文件數據的HTML循環輸出

{ 
    "elements" : [{ 
    "name": "Hydrogen", 
    "symbol": "H", 
    "number": 1, 
    "period": 1, 
    "category": "diatomic nonmetal ", 
    "atomic_mass": 1.008, 
    }] 
} 

下面的代碼,我寫了顯示數據

$(function(){ 

var btn = $('button'); 
btn.on('click',load); 

function load(){ 
    var fetch = new XMLHttpRequest(); 

    fetch.open('GET','elements.json',true); 
    fetch.onload = function() { 
     if(this.status == 200) { 
      var elem = JSON.parse(this.responseText); 
      var output = ''; 
      for (var i in elem) { 
       output += ` 
        <div> 
         <p>Name : ${elem.elements[i].name}</p> 
         <p>Symbol : ${elem.elements[i].symbol}</p> 
         <p>Number : ${elem.elements[i].number}</p> 
        </div> 
       `; 
      } 
      $('.data').html(output); 
     } 
    } 
    fetch.send(); 
} 

}); 

問題 - >

我有一個for循環或任何循環的問題,W/O循環和插入值i手動elements[i]完美的作品。

+0

有什麼問題或問題,任何錯誤。 –

+0

以下是控制檯返回的內容 - '未捕獲的TypeError:無法讀取未定義的屬性'名稱' –

+0

由於您的json無效,您可以將console.log(elem)放在此行之後var elem = JSON.parse(this.responseText);並在這裏發佈記錄的數據。 –

回答

1

您獲得的elem不是數組,只是一個包含數組的字段的對象,這就是爲什麼您的循環失敗。你必須循環通過elem.elements。 output..can你簡短,它不是有效的JSON數據試試這個...

fetch.onload = function() { 
    if(this.status == 200) { 
     var elem = JSON.parse(this.responseText); 
     var output = ''; 
     for (var i=0, l=elem.elements.length; i<l ; i++) { 
      output += ` 
       <div> 
        <p>Name : ${elem.elements[i].name}</p> 
        <p>Symbol : ${elem.elements[i].symbol}</p> 
        <p>Number : ${elem.elements[i].number}</p> 
       </div> 
      `; 
     } 
     $('.data').html(output); 
    } 
} 
+0

我試過'我

+0

這只是我過去閱讀的一個很好的練習題。使用我的選項,可以避免系統在每次迭代中計算對象的長度(以檢查「我」狀況)。我從此使用它 –

+0

很酷,很有道理! –