Разбор JSON с помощью jQuery [2] - PullRequest
1 голос
/ 11 ноября 2010

Я пытаюсь предупредить идентификатор и подкатегорию в строке JSON, возвращенной с сервера с использованием jQuery.

Я получаю следующую строку JSON.

[{"name":"Technology","id":117,"subcategory":"Machines"},
{"name":"Technology","id":118,"subcategory":"Tools"},
{"name":"Technology","id":119,"subcategory":"Air"}]

Я пытаюсь сделать:

$.getJSON("scene/getSubCategories/Technology",
    {
        format: "json"
    },
    function(data) {
        alert(data);
        $.each(data.object, function(i,object){
            alert(object.id + " " +object.subcategory);
        });
    });

Я получаю ошибку

Сообщение: длина равна нулю или не является объектом

Линия: 12

Char: 7740

Код: 0

URI: http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js

Что я делаю не так?

Я использую jQuery 1.3.2, потому что у меня есть сторонний плагин JavaScript, который работает с этой версией jQuery, и я не могу понять, как обе версии (1.3.2 и 1.4.3) могут жить вместе на одной стороне.

Ответы [ 3 ]

3 голосов
/ 11 ноября 2010

Попробуйте это:

$.each(data, function(i,item){
    alert(item.id + " " +item.subcategory);
});

Первый аргумент each() должен быть объектом для итерации.Это должны быть данные (данные не имеют свойства «объект»).Вторым аргументом предоставленной функции будет текущий элемент итерированного объекта.

1 голос
/ 11 ноября 2010

Вторым параметром getJSON () должна быть функция, получающая анализируемые вами данные.each () получает массив и передает, в вашем случае, индекс и значение элемента

$.getJSON("scene/getSubCategories/Technology", function(data) {
     alert(data);
     $.each(data, function(i, object){
          alert(object.id + " " +object.subcategory);
     });
});
1 голос
/ 11 ноября 2010

"длина" равна нулю или не является объектом ", поскольку data.object не существует. Вы, вероятно, хотели напечатать:

$.each(data, function(i,object) {

вместо

$.each(data.object, function(i,object) {

В качестве дополнительного примечания, в вашем случае вы можете использовать собственный цикл JavaScript вместо $ .each:

for(var i = 0; i < data.length; i++) {
    var object = data[i];
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...