jQuery не будет анализировать мой JSON из запроса AJAX - PullRequest
87 голосов
/ 30 октября 2008

У меня проблемы с анализом некоторых данных JSON, возвращаемых с моего сервера, с помощью jQuery.ajax ()

Для выполнения AJAX я использую:

$.ajax({
  url: myUrl,
  cache: false,
  dataType: "json",
  success: function(data){
    ...
  },
  error: function(e, xhr){
    ...
  }
});  

И если я верну массив элементов, то он будет работать нормально:

[ { title: "One", key: "1" }, { title: "Two", key: "2" } ]

Функция успеха вызывается и получает правильный объект.

Однако, когда я пытаюсь вернуть один объект:

{ title: "One", key: "1" } 

Функция ошибки вызывается, и xhr содержит parsererror. Я попытался заключить JSON в скобки на сервере перед отправкой по сети, но это не имеет значения. Тем не менее, если я вставлю содержимое в строку в Javascript, а затем использую функцию eval (), он оценит его отлично.

Есть идеи, что я делаю не так?

Anthony

Ответы [ 20 ]

2 голосов
/ 09 декабря 2008

Если вы используете веб-службы ASP.NET с помощью jQuery, убедитесь, что в ваш файл web.config включено следующее:

<webServices>
    <protocols>
        <add name="HttpGet"/>
        <add name="HttpPost"/>
    </protocols>
</webServices>
1 голос
/ 23 апреля 2014

Я получаю статус = parseerror и xhr.status = 200.

Проблема для меня заключалась в том, что URL-адрес внутри ответа JSON заставил '\' перейти к / 'исправить это.

1 голос
/ 06 апреля 2012

также попробуйте это

$.ajax({
    url: url,
    data:datas,
    success:function(datas, textStatus, jqXHR){
    var returnedData = jQuery.parseJSON(datas.substr(datas.indexOf('{')));
})};

в моем случае сервер отвечает неизвестным символом до '{'

1 голос
/ 04 апреля 2011

В среде ColdFusion одна вещь, которая может вызвать ошибку, даже при правильно сформированном JSON, заключается в том, что Включить вывод отладочной информации запроса включен в Администраторе ColdFusion (в разделе «Отладка и ведение журнала»> «Параметры вывода отладочной информации»). ). Отладочная информация будет возвращена с данными JSON и, таким образом, сделает ее недействительной.

1 голос
/ 08 января 2011

jQuery подавляется определенными ключами JSON. Я отправлял этот фрагмент JSON на PHP:

echo json_encode((object) array('result' => 'success'));

Переименование ключа 'result' во что-то другое работает. Я предполагаю, что это зарезервированное столкновение слов какого-то рода и может быть ошибкой в ​​jQuery (1.4.2).

1 голос
/ 30 октября 2008

Если возврат массива работает, а возврат одного объекта - нет, вы также можете попытаться вернуть свой единственный объект в виде массива, содержащего этот единственный объект:

[ { title: "One", key: "1" } ]

таким образом вы возвращаете непротиворечивую структуру данных, массив объектов, независимо от полезной нагрузки данных.

Я вижу, что вы пытались обернуть свой единственный объект в "скобки", и предлагаю это на примере, потому что, конечно, JavaScript обрабатывает [..] иначе, чем (..)

1 голос
/ 29 ноября 2008

Я нашел в некоторых своих реализациях, которые мне пришлось добавить:

obj = new Object; obj = (data.obj);

, который, казалось, решил проблему. Eval или нет, мне показалось, что он делает то же самое.

1 голос
/ 28 ноября 2008

Если вызывается обработчик ошибок jQuery и объект XHR содержит «ошибку синтаксического анализатора», это, вероятно, ошибка синтаксического анализатора, возвращающаяся с сервера.

Является ли ваш сценарий с несколькими результатами, когда вы вызываете сервис без параметра, но он прерывается, когда вы пытаетесь указать параметр для извлечения отдельной записи?

С какого бэкэнда вы это возвращаете?

Например, в сервисах ASMX это часто бывает, когда параметры передаются в jQuery в виде объекта JSON вместо строки JSON. Если вы предоставите jQuery фактический объект JSON для его параметра «данные», он будет сериализовать его в стандартные пары k, v с разделителями вместо отправки его в виде JSON.

0 голосов
/ 22 июля 2014

использование

$data = yourarray(); 
json_encode($data)

на стороне сервера. На стороне клиента используйте ajax с типом данных JSON и убедитесь, что кодировка вашего документа не соответствует UTF-8, а спецификация должна быть UTF-8.

0 голосов
/ 30 апреля 2011

Я боролся с этим и провел несколько часов, пытаясь выяснить это, пока не использовал firebug, чтобы показать объект данных.

var data = eval("(" + data.responseText + ")");
console.log(data.count);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...