2014-09-18 118 views
0

我嘗試了一些組合,但我被卡住了。任何幫助表示讚賞。我該如何閱讀JSON記錄(這是JSON組織的語法?)我一直得到TypeError: Cannot read property '0' of undefined下面的代碼和或排列它。jQuery Loop JSON問題

JSON:

{ 
    "wty_upgrade":[{ 
        "wty":"Upgrade from 3 to 5 years", 
        "mth":24, 
        "pig":3000 
       }, 
       { 
        "wty":"Upgrade from 3 to 10 years", 
        "mth":84, 
        "pig":8000 
       }] 
} 

CODE:

function LoadWtyUpgPlans(wty) { 

    var WtyRow = ''; 
    var WtyYears = ''; 

    for (var i = 0; i < wty.wty_upgrade[0].length; i++) { 
     WtyYears = wty.wty_upgrade[0].mth[i]/12; 
     WtyRow +='<tr> \ 
        <td> \ 
         <input type="hidden" class="smg-wty-up-val" value="' + wty.wty_upgrade[0].mth[i] + '"> \ 
         ' + wty.wty_upgrade[0].wty[i] + ' \ 
        </td> \ 
        <td align="right">' + WtyYears + '</td> \ 
        <td align="right">' + wty.wty_upgrade[0].pig[i] + '</td> \ 
       </tr>'; 
    }; 
}; 
+1

如果你只使用它的一個元素'wty.wty_upgrade [0] .length' – 2014-09-18 16:21:34

+0

你從哪裏得到你的JavaScript對象,你並不需要一個循環?它如何傳遞給函數?做一個'console.log(wty)'看看裏面有什麼 - 失敗的地方在哪裏?我假設這裏是'wty.wty_upgrade [0] .mth [0]' - 試試'wty.wty_upgrade [0] .mth' – 2014-09-18 16:23:46

回答

2

你有幾個問題。

問題是你沒有循環遍歷數組,你正在遍歷數組的第一個索引。其次,你正在試圖引用第m和豬的指數。他們不是數組...

function LoadWtyUpgPlans(wty) { 

    var WtyRow = ''; 
    var WtyYears = ''; 
    var upgrades = wty.wty_upgrade; 

    for (var i = 0; i < upgrades.length; i++) { 
     console.log("wty: ", upgrades[i].wty); 
     console.log("mth: ", upgrades[i].mth); 
     console.log("pig: ", upgrades[i].pig); 
    } 

} 
+0

天才!謝謝! – TheRealPapa 2014-09-18 17:49:26

0

錯誤在wty.wty_upgrade ** [0] **長度。 ==> wty.wty_upgrade.length

0

你應該重新考慮你迭代你的JSON的方式。 比方說,你確定你的JSON的數據變量,像這樣:

var data = {"wty_upgrade":[{"wty":"Upgrade from 3 to 5 years", "mth":24, "pig":3000}, {"wty":"Upgrade from 3 to 10 years", "mth":84, "pig":8000}]} 

然後你可以使用jQuery通過你wty_upgrade陣列這樣的迭代:

$.each(data.wty_upgrade, function(){ 

     //EDIT: 
     wtyYears = this.mth/12; //this is the current array entry - first time: {"wty":"Upgrade from 3 to 5 years", "mth":24, "pig":3000} 


     WtyRow +='<tr> \ 
        <td> \ 
         <input type="hidden" class="smg-wty-up-val" value="' + this.mth + '"> \ 
         ' +this.mth + ' \ 
        </td> \ 
        <td align="right">' + wtyYears + '</td> \ 
        <td align="right">' + this.pig + '</td> \ 
       </tr>'; 
     $("#myTable").append(WtyRow); //you also need to append your row to a table or you'll never see it 

    }); 

編輯:添加缺少的劃分爲第二TD

http://jsfiddle.net/bmartinelle/m0sc4dqz/2

而且,作爲一個最佳實踐,你不應該大寫的變量 - 也確保ÿ ou包括var whateverName =,所以你不會創建一個全局變量!

+0

僅供參考:您可以從OPs代碼中更改邏輯。 – epascarello 2014-09-18 16:28:48

+0

@epascarello不確定你的意思 - 我認爲這是一個解決問題的地方?我就如何解決這個問題提出了一個建議。我的解決方案不違反任何我知道的最佳實踐,並且意味着有用/有用。我不是故意踩你的腳趾... – 2014-09-18 16:33:48

+0

第二個TD有邏輯,你從JSON輸出一個字符串。 AKA,它應該是'WtyYears'這是'wty/12' – epascarello 2014-09-18 16:34:35