Проблема при циклировании JSON

#jquery #json

#jquery #json

Вопрос:

Я хочу добавить данные в selectbox. Но я получил эту ошибку…

«Ошибка: $(«»).attr(«значение», 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"
        }
    ]
}
  

В чем моя вина?
Спасибо ранее…

Ответ №1:

Ваши ключи JSON содержат пробелы после своих имен, поэтому ключом является "guruMapelId " , а не "guruMapelId" . Вы можете либо убрать пробел из ваших ключей JSON, либо использовать вместо него var guruMapelId = v["guruMapelId "]; и var guruNama = v["guruNama "]; .

Ответ №2:

Это было непросто. Если вы передадите undefined в attr ( attr('value', undefined) ) или html ( html(undefined) ), это фактически будет то же самое, что вызов attr('value') or html() , которые оба возвращают строку, а не объект jQuery.

Но подождите, вы говорите, я не передаю undefined , я передаю значения guruMapelId и guruNama !

Давайте посмотрим поближе: у всех ключей в JSON есть конечный пробел. Это означает, что v.guruMapelId не существует (следовательно, есть undefined ). Вам пришлось бы обращаться к данным с

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

То же самое для guruNama . Но лучше было бы создать правильный JSON.

ДЕМОНСТРАЦИЯ

Ответ №3:

Проверьте, что вы получаете в своем вызове $.getJSON (просто используйте alert (guruMapelId) и guruNama), затем вы можете просто указать свой вариант следующим образом:

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