$ .ajax parseerror on {"vErrorsFound": true, "vMessage": "Ошибка входа"} - PullRequest
1 голос
/ 21 февраля 2011

Я обновляю jQuery 1.3.2 до jQuery 1.5, и мне не удается обработать JSON. С $ .ajax я вызываю скрипт php, который возвращает следующее через метод json_encode PHP:

{"vErrorsFound":true,"vMessage":"Login Failed"}

Я попытался упростить объект до: {"vErrorsFound":true} в одиночку и {"vMessage":"Login Failed"} в одиночку, но я все еще получаю сообщение об ошибке разбора от вызова ajax.

Вот вызов ajax.

$.ajax({
       url : "index_vld.php",
       data: {Username: $("input[name=Username]").val(), Password: $("input[name=Password]").val()},
       dataType: 'json',
       success: function (data, textStatus, jqXHR)
       {
           alert(data);
       },
       error: function (jqXHR, textStatus, errorThrown)
       {
           alert(textStatus + ' ' + errorThrown);
       }
       });

Я обнаружил, что анализ JSON намного более строг в новой версии jquery, однако я не могу выяснить, что не так в этом простом объекте json, возвращенном из сценария PHP. Я также попытался установить тип содержимого сценария php для application / json, но безуспешно.

Сгенерировано исключение: jQuery15045727721066214144_1298305275108 не был вызван.

Невозможно обновить до jQuery 1.5, прежде чем я решу это.

Спасибо за вашу помощь.

Ответы [ 4 ]

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

http://blog.m0sa.net/2011/02/jqueryvalidation-breaks-jquery-15-ajax.html

Причиной проблемы является строка JavaScript в jQuery.validate.js, которая переопределяет параметры, которые вы передаете в вызов $ .ajax, всеми настройками по умолчанию (и jQuery.ajaxSettings по умолчанию имеет значение {jsonp: «обратный вызов», jsonpCallback: function () {...}}):

Обходной путь:

$(function () {
  $.ajaxSettings.cache = false;
  $.ajaxSettings.jsonp = undefined;
  $.ajaxSettings.jsonpCallback = undefined;
})
2 голосов
/ 08 марта 2011

У меня было такое же поведение при обновлении запросов Ajax с jQuery 1.4.4 до 1.5.1. Ответ Алексея сработал на короткий срок, но переписывание Ajax в jQuery 1.5 делает это решение неоптимальным для длительного использования.

Если вы используете jQuery + плагин jQuery Validation и продолжаете сталкиваться с этой ошибкой, попробуйте получить последний источник проверки из https://github.com/jzaefferer/jquery-validation. Я извлек источник, поместил его в свое приложение, и теперь я получаю много более последовательные ответы Ajax.

1 голос
/ 21 февраля 2011

Нет ничего плохого в JSON, который вы цитировали.( jsonlint.com - удобное место для проверки подобных вещей.)

Сообщение об ошибке, которое вы цитируете, звучит как проблема JSON-P;Вы редактировали dataType перед публикацией вопроса?Потому что, похоже, jQuery думает, что вы пытаетесь сделать JSON-P (dataType: "jsonp"). Подробнее здесь. Или, возможно, у вас есть глобальные настройки ajax , настроенные на выполнение JSON-P?

Редактировать : ваш код в кавычках работает нормально: http://jsbin.com/ocapo5

0 голосов
/ 20 сентября 2012

Я изменил тип данных на dataType: 'text' и использую JSON.parse для разбора моей строки json в объект javascript, и она работает нормально

success: function (data) {myObject=JSON.parse(data);}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...