Ответ JQuery JSON всегда вызывает ParseError - PullRequest
34 голосов
/ 23 февраля 2011

Я пытаюсь выполнить некоторые базовые операции с помощью jQuery и JSON.В настоящее время возникают проблемы с JQuery, принимающим JSON-ответ от моего приложения Play Framework.Ниже приведена упрощенная версия кода, который все еще выдает ошибку.

$.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 не показывает ошибок, и различные инструменты JSON lint также проверяются.Изменение dataType на «text» делает успешным вызов.Но я пытаюсь использовать вызов isUsernameAvailable как часть плагина проверки jQuery, поэтому мне нужно, чтобы он возвращал действительный JSON.

Ответы [ 4 ]

34 голосов
/ 23 февраля 2011

Может быть, я неправильно понимаю, но не могли бы вы установить 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 может преобразовывать dataType из того, что он получил в заголовке Content-Type, в то, что вам нужно. Например, если вы хотите, чтобы текстовый ответ обрабатывался как XML, используйте»текст xml "для типа данных."Может быть, вы можете попробовать "текст JSON".

12 голосов
/ 24 февраля 2011

Я получил ту же ошибку, как только я обновил до jQuery 1.5.Оказывается, моя проблема в том, что я также использую плагин проверки jquery, который не совместим с jQuery 1.5.Если я удалю подключаемый модуль проверки jquery, $ .ajax () с dataType json будет работать нормально.

Дополнительная информация о несовместимости подключаемого модуля проверки jquery приведена здесь: http://bugs.jquery.com/ticket/8118

3 голосов
/ 13 августа 2012

Я также получил «parsererror jQueryNNNN_NNN не был вызван» (с использованием jsonp и jQuery 1.7.2). Причина была в том, что одно из значений в возвращенной структуре json содержало символы новой строки.Надеюсь, это кому-нибудь поможет.

2 голосов
/ 12 апреля 2016

Я получил parseerror, потому что url содержал callback=? часть. Это волшебная строка, которая активирует функциональность JSONP .

Поскольку REST API на моей стороне сервера изменился с JSONP на JSON, формат данных, возвращаемых из него, больше не был совместим с jQuery.getJSON(..) с callback=?.В этой ситуации jQuery.getJSON(..) не будет вызывать обратные вызовы success, но вместо этого будут использоваться обратные вызовы fail.

Я решил эту проблему, удалив часть callback=? из параметра url.

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