JSON-объект распознается как String от jQuery - PullRequest
1 голос
/ 10 июня 2011

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

По сути, JSON кодируется PHP и выглядит следующим образом:

{"1":{"key1":"value1","key2":"value2"},"0":{"key1":"value1","key2":"value2"}}

Функция обратного вызова$ .ajax выглядит так:

$.each(data, function(item) {
      console.log($.type(item));
      myfunction(item.key1);
      });

элемент распознается как строка , а item.key1 не определен.

Тип содержимого ответа - "application/ json ", так что jQuery должен его проанализировать.затем данные распознаются как объект.

Итак ... что не так?

Ответы [ 4 ]

0 голосов
/ 21 апреля 2013

При просмотре ответа от сервера с помощью Firebug вы видели JSON "вкладку" для вызова? Если нет, вы должны добавить die(); в конец скрипта PHP, генерирующего JSON, чтобы jQuery распознал его как таковой. Без die() jQuery видел ее как строку, и я не смог ее правильно проанализировать.

Я знаю, что этот вопрос старый, но я надеюсь, что ответ может помочь кому-то еще, так как эта проблема была для меня настоящим головокружением.

0 голосов
/ 10 июня 2011

item - это a String.

Первый аргумент обратного вызова $.each() - это ключ.В вашем примере ваш JSON-объект представляет собой Object с числовыми индексами, кроме строк.Вы пытаетесь получить доступ к свойству от имени свойства.Вместо этого вы хотите использовать data[item] в вашем примере.

Вы хотите получить доступ к значениям свойств, например, так ...

$.each(data, function(propertyName, propertyValue) {
      console.log(propertyName, propertyValue);
});

Имена переменных были изменены, чтобы быть более понятными.

В реальном Array аргументами будет индекс, за которым следует значение.

0 голосов
/ 10 июня 2011

Если это действительно JSON, все должно быть в порядке.

По внешнему виду возвращаемого объекта вам, возможно, придется использовать:

item.1.key1
//Or
item['1'].key1

Вместо:

item.key1

Попробуйте и посмотрите, что вы получите.

0 голосов
/ 10 июня 2011

Попробуйте установить тип json:

$.ajax({
  dataType: 'json'
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...