循环JSON中的问题

时间:2011-05-22 00:39:33

标签: jquery json

我想将数据附加到选择框。但是,我收到了这个错误......

  

“错误:$(”“)。attr(”value“,guruMapelId).html不是函数
  来源档案:http://localhost:8084/controller?aksi=kurikulum
  行: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"
        }
    ]
}

我的错是什么? 谢谢你......

3 个答案:

答案 0 :(得分:4)

您的JSON密钥在其名称后面包含空格,因此密钥为"guruMapelId ",而不是"guruMapelId"。您可以从JSON密钥中删除空格,也可以使用var guruMapelId = v["guruMapelId "];var guruNama = v["guruNama "];代替。

答案 1 :(得分:2)

这是一个棘手的问题。如果您将undefined传递给attrattr('value', undefined))或htmlhtml(undefined)),则实际上与调用attr('value')或{ {1}},它们都返回一个字符串而不是一个jQuery对象。

但等等,你说,我没有传递html(),我传递了undefinedguruMapelId的值!< / em>的

让我们仔细看看: JSON中的键都有尾随空格 。这意味着,guruNama不存在(因此v.guruMapelId)。您必须使用

访问数据
undefined

v['guruMapelId '] // <-- note the trailing space 相同。但更好的方法是创建适当的JSON。

DEMO

答案 2 :(得分:0)

检查你的$ .getJSON中的内容(只需使用alert(guruMapelId)和guruNama),然后你可以选择如下:

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