Разбор и доступ к данным JSON - PullRequest
0 голосов
/ 05 апреля 2011

У меня есть данные JSON (добавлена ​​новая строка для удобства чтения), возвращенная как

[{"pk": 7, "model": "pycourt_login.orders", "fields": {"status": 0, "delivered": false, "order_id": "6count1%2", "student_id": 5, "counterid": "counter1", "datetime": "2011-04-05 01:44:01", "dish": 6, "transaction_id": "2008010661301935441", "quantity": 2}},
{"pk": 8, "model": "pycourt_login.orders", "fields": {"status": 0, "delivered": false, "order_id": "9count1%1", "student_id": 5, "counterid": "counter1", "datetime": "2011-04-05 01:44:14", "dish": 9, "transaction_id": "2008010661301935454", "quantity": 1}}]

Как получить доступ к каждому элементу в jQuery.

Я пытался сделать что-то вроде (предположим, что / pendingorders возвращает JSON)

$(document).ready(function (){ 
jQuery.ajax({
    cache: false,
    url: "/pendingorders",
    type: "GET",
    success: function(json) {
        $.each(json.results, function(i,dish){
            alert(dish.pk); 
            },'json')
        },  
    }); 
});

Это ошибка, которую я получаю в Firebug:

object is undefined
[Break On This Error] length = object.length,
jquery.js (line 605)

Ответы [ 2 ]

2 голосов
/ 05 апреля 2011

Вы передаете 'json' в качестве параметра each() (смотрите отступ). Обычно это можно сделать на get(), но ajax() работает по-другому - достаточно установить параметр dataType:

jQuery.ajax({
    cache: false,
    url: "/pendingorders",
    type: "GET",
    dataType: 'json',
    success: function(json) {
        $.each(json.results, function(i,dish){
            alert(dish.pk); 
        });
    }
});

См. Справочную документацию по ajax для справки.

2 голосов
/ 05 апреля 2011

С текущей структурой, я думаю, вы просто хотите:

jQuery.ajax({
    cache: false,
    url: "/pendingorders",
    type: "GET",
    success: function(json) {
        $.each(json, function(i,dish){
              alert(dish.pk); 
        });
    }); 
});

У вас был паразит , 'json' в качестве третьего параметра для each и запятая после значения успеха (что нормальноно, вероятно, непреднамеренно)

Однако вы можете захотеть сделать верхний уровень объектом, а не массивом из-за перехвата JSON .

Если бы структура была:

{"results":
[{"pk": 7, "model": "pycourt_login.orders", "fields": {"status": 0, "delivered": false, "order_id": "6count1%2", "student_id": 5, "counterid": "counter1", "datetime": "2011-04-05 01:44:01", "dish": 6, "transaction_id": "2008010661301935441", "quantity": 2}},
{"pk": 8, "model": "pycourt_login.orders", "fields": {"status": 0, "delivered": false, "order_id": "9count1%1", "student_id": 5, "counterid": "counter1", "datetime": "2011-04-05 01:44:14", "dish": 9, "transaction_id": "2008010661301935454", "quantity": 1}}]}

Ваша оригинальная каждая строка:

$.each(json.results, function(i,dish){

будет правильным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...