Ответ JQuery JSON всегда запускает ParseError
Я пытаюсь выполнить некоторые основные операции с jQuery и JSON. В настоящее время возникают трудности с jQuery, принимающим JSON-ответ от моего приложения для платформы. Ниже приведена упрощенная версия кода, который все еще вызывает ошибку.
$.ajax({
type: 'POST',
url: "@{FrontEnd.isUsernameAvailable()}",
data: "name=thisnameisavailable",
cache: false,
success: function(data) {
console.log("Success... ");
},
error: function(jqXHR, textStatus, errorThrown) {
console.log("Error... " + textStatus + " " + errorThrown);
},
dataType: 'json'
});
Обратный вызов ошибки всегда запускается. Он отображает
Ошибка... parsererror jQuery15001997238997904205_1298484897373 не был вызван
Проверка возвращенного JSON через Firebug не показывает ошибок, а также проверяет различные инструменты Jint. Изменение типа DataType на "text" делает успешным вызов. Но я пытаюсь использовать вызов isUsernameAvailable как часть плагина проверки jQuery, поэтому мне нужно, чтобы он возвращал действительный JSON.
Ответы
Ответ 1
Может быть, я не понимаю, но не могли ли вы установить dataType
в text
и JSON.parse() возвращенные данные?
success: function(data) {
data = JSON.parse(data);
// process data
},
Отредактировано для добавления общепринятого решения (ранее только комментарий):
Я просто взглянул на api.jquery.com/jQuery.ajax, и похоже, что с помощью jQuery 1.5 вы можете выполнить сортировку типов. "Несколько значений, разделенных пробелами: с jQuery 1.5 jQuery может преобразовать тип данных из полученного в заголовке Content-Type значения, которое вам нужно. Например, если вы хотите, чтобы текстовый ответ обрабатывался как XML, используйте" text xml "для dataType." Возможно, вы можете попробовать "text json".
Ответ 2
Я получил ту же ошибку, как только я обновился до jQuery 1.5. Оказывается, моя проблема в том, что я также использую плагин проверки jquery, который несовместим с jQuery 1.5. Если я удалю плагин проверки jquery, $.ajax() с dataType json отлично работает.
Более подробная информация о несовместимости плагина проверки подлинности jquery:
http://bugs.jquery.com/ticket/8118
Ответ 3
Я также получил "parsererror jQueryNNNN_NNN не был вызван" (используя jsonp и jQuery 1.7.2)
Причина заключалась в том, что одно из значений в возвращаемой структуре json содержало новые строки.
Надеюсь, это поможет кому-то.
Ответ 4
Я получил parseerror
, потому что url
содержит часть callback=?
. Это волшебная строка, которая активирует функциональность JSONP.
Поскольку мой API REST на стороне сервера изменился с JSONP на JSON, формат данных, возвращенный из него, больше не совместим с jQuery.getJSON(..)
с callback=?
. В этой ситуации jQuery.getJSON(..)
не будет вызывать обратные вызовы success
, но обратные вызовы fail
.
Я решил эту проблему, удалив часть callback=?
из параметра url
.