JQuery неправильно анализирует JSON - PullRequest
5 голосов
/ 17 декабря 2008

У меня проблема. Я создал скрипт для запроса внутренней ссылки, которая отправляет ответ. Вот как выглядит скрипт:

jQuery.get(callUrl, function(data){
              console.log(typeof data);
              jQuery.each(data.items, function(i,item){            

                                      console.log(i);

                                });
        },'json');

и ответ, который сервер отправляет обратно, выглядит следующим образом:

{"items":[            
  {
   "src": "gallery_item_data_Jc4EaLP6vlwd_large.jpg",
   "id": "83",
   "gallery_id": "30",
   "username": "admin"
  }]
}

Моя проблема в том, что когда я анализирую "данные", их тип всегда является строкой. Мне нужно, чтобы он был объектом, чтобы я мог запросить его и проанализировать с помощью своего сценария. Чтобы понять суть проблемы, я попытался сравнить мой скрипт с примером на странице документации jQuery:

http://docs.jquery.com/Ajax/jQuery.getJSON

Основные различия с запросом на этой странице и моим запросом в том, что он использует метод getJSON. Когда я попытался использовать это с URL-адресом моего сервера, я вообще не получил ответа, поэтому я выбрал метод get и указал тип возвращаемого значения как «json».

Еще одна вещь, которую я попробовал: я проверил фид Flickr , который пример jQuery использует для поиска заголовка Content-type, который он отправляет обратно, думая, что мой фид имеет неправильный заголовок, и это это в ленте Flickr:

Content-Type    application/x-javascript; charset=utf-8

Это точно такой же заголовок в моей собственной ленте. Так что я озадачен. Кто-нибудь знает, почему это происходит?

Ответы [ 2 ]

7 голосов
/ 17 декабря 2008

JSON должен иметь квадратные скобки, поэтому он должен быть:

({"items":[            
  {
   "src": "gallery_item_data_Jc4EaLP6vlwd_large.jpg",
   "id": "83",
   "gallery_id": "30",
   "username": "admin"
  }]
})

После этого вы сможете использовать getJSON, так как это самый простой способ получить данные в виде объекта. Тем не менее, вы также можете выполнить eval () строку, и это вернет объект.

1 голос
/ 17 декабря 2008

Вы пытались создать объект из этой строки, вызвав функцию JavaScript eval ()? Если вы впервые вызываете eval (data) в своей функции обратного вызова, это должно дать вам объект.

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