Подтвердить что ты не робот

Ответ 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.

4b9b3361

Ответ 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.