2011-05-22 106 views
3

我想追加數據到選擇框。但是,我得到這個錯誤...問題在循環JSON

"Error: $("").attr("value", guruMapelId).html is not a function
Source File: http://localhost:8084/controller?aksi=kurikulum
Line: 5"

這是我的js代碼:

function dataGuruMapelSelect(dataSelect){ 
    $.getJSON("controller", "aksi=dataGuruMapel", function(json){ 
     $.each(json.guruMapelData, function(k,v){ 
      var guruMapelId = v.guruMapelId; 
      var guruNama = v.guruNama ; 
      $('<option />').attr('value',guruMapelId).html(guruNama).appendTo(dataSelect); 
     }) 
    }); 
} 

這是JSON數據

{ 
    "guruMapelData": [ 
     { 
      "guruMapelId ": "1", 
      "guruNip ": "1331/001", 
      "guruNama ": "HARI BUDIYONO DRS.", 
      "mapelNama ": "PPKn", 
      "tahunAjarNama ": "2010/2011", 
      "mapelKategoriNama ": "Normatif", 
      "mapelId ": "1" 
     }, 
     { 
      "guruMapelId ": "2", 
      "guruNip ": "1331/002", 
      "guruNama ": "PENI WARDAYANI DRA", 
      "mapelNama ": "Kewirausahaan", 
      "tahunAjarNama ": "2010/2011", 
      "mapelKategoriNama ": "Produktif", 
      "mapelId ": "2" 
     } 
    ] 
} 

什麼是我的錯? 以前感謝...

回答

2

這是一個棘手的問題。如果您通過undefinedattrattr('value', undefined))或htmlhtml(undefined)),它實際上會與調用attr('value')html()相同,它們都返回一個字符串而不是jQuery對象。

別急,你說,我不是過客undefined,我傳遞的guruMapelIdguruNama值!

讓我們仔細看看:在JSON的按鍵都有尾隨空格。這意味着,v.guruMapelId不存在(因此是undefined)。你將不得不與

v['guruMapelId '] // <-- note the trailing space 

同爲guruNama訪問數據。但更好的是創建適當的JSON。

DEMO

+0

謝謝...它的工作原理.... :D – rasyeda 2011-05-22 01:11:45

4

您的JSON密鑰在其名稱後面包含空格,因此密鑰爲"guruMapelId ",而不是"guruMapelId"。您可以從JSON密鑰中刪除空間,或者使用var guruMapelId = v["guruMapelId "];var guruNama = v["guruNama "];代替。

+1

銳利的眼睛,@rdineiu ! – yitwail 2011-05-22 01:04:45

+0

謝謝... 它的作品...:D – rasyeda 2011-05-22 01:06:38

+0

歡迎您:) – rid 2011-05-22 01:12:29

0

檢查什麼,你在你的$ .getJSON(只需使用alert(guruMapelId)和guruNama)獲得致電那麼你可以讓你的選項如下:

$('<option />').val(guruMapelId).text(guruNama)appendTo(dataSelect);