JQuery 1.5 AJAX вызывает сбой с «недопустимой меткой» для запросов JSON - PullRequest
10 голосов
/ 03 февраля 2011

Я только что обновил jQuery с версии 1.4 до версии 1.5, и теперь мои вызовы AJAX всегда завершаются с ошибкой «недопустимая метка».

Пример запроса:

jQuery.ajax({
    async: false
    , dataType: "json"
    , error: function (xhr, status, error) { ... }
    , success: function (data, status, xhr) { ... }
    , type: "post"
    , url: "ajax/request.asp"
});

В сети я обнаружил, что эта ошибка возникает, когда возвращаемый JSON не обернут обратным вызовом jQuery (например, jQuery1234({ "something": "abcd" }).

. Проблема в том, что я возвращаю JSON, а не JSONP (и я заявляюэто в AJAX-запросе), так почему я должен указать обратный вызов в возвращенном JSON?

1.5 журнал изменений ничего об этом не говорит ... (Или я не могу читать?)

Обновление:

Это пример не работающего JSON:

{
   "esito":"Ok",
   "centriCosto":[
      {
         "id":"1",
         "descrizione":"Colazione"
      },
      {
         "id":"2",
         "descrizione":"Pranzo"
      },
      {
         "id":"3",
         "descrizione":"Cena"
      }
   ]
}

И это тот же рабочий JSON в оболочке обратного вызова:

jQuery1502710949228847014_1296739130498({
   "esito":"Ok",
   "centriCosto":[
      {
         "id":"1",
         "descrizione":"Colazione"
      },
      {
         "id":"2",
         "descrizione":"Pranzo"
      },
      {
         "id":"3",
         "descrizione":"Cena"
      }
   ]
})

Кстати, Firebug говорит, что оба они являются действительными JSON (и он очень требователен к правильности).

Ответы [ 8 ]

28 голосов
/ 03 февраля 2011

Хорошо, я узнал, что, черт возьми, происходит.

Модуль проверки jQuery не совместим с jQuery 1.5 (см. one и two ), что приводит к удалению правильного поведения модуля.

Если у кого-то еще есть эта проблема, в хранилище плагина есть патч: ссылка

5 голосов
/ 14 апреля 2011

Я действительно столкнулся с подобной проблемой, но, похоже, она связана с этой ошибкой: http://bugs.jquery.com/ticket/8398

Это не обязательно связано с jQuery-validate, и мне потребовалось некоторое время, чтобы разобраться.Оказывается, что jQuery 1.5 модифицирует последующие вызовы ajax для json в jsonp, что приводит к этой ошибке.

Я исправил это, следуя одному из обходных путей, предложенных в истории изменений ошибок, и поместил следующий код где-то перед выполнением моих вызовов ajax:

$.ajaxSetup({
   jsonp: null,
   jsonpCallback: null
});

Должен исправить любые проблемы для другого ajaxзапросы тоже.

2 голосов
/ 22 июня 2011

Вот возможный обходной путь для тех, у кого есть плагин валидатора.

dataType: "text json"

Работает как шарм.Не спрашивай меня почему.В chrome вы можете увидеть синтаксическую ошибку jquery при синтаксическом анализе «:» в возвращении json.И не заблуждайтесь об этом, возврат действителен JSON.Я не пробовал, но подозреваю, что ответ Тома также сработает.

1 голос
/ 11 мая 2011

похоже, что это исправлено в версии 1.6 - возникла та же проблема после обновления до версии 1.5.1 и после обновления до 1.6 проблема исчезла.

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

Если ваш код на стороне сервера полагается на имя обратного вызова, начинающееся с "jsonp", у вас может быть проблема.Префикс имени обратного вызова был изменен на «jQuery» в версии 1.5.

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

попробовать: Сделал быстрый поиск json в jquery-1.5.js и нашел это в строке 6905:

// Обнаружение, нормализация параметров и установка обратных вызовов для запросов jsonp

jQuery.ajaxPrefilter("json jsonp", function( s, originalSettings, dataIsString /* internal */ ) {

удаление "json" из первого аргумента добавит правильное поведение, когда спец. dataType:"json"

0 голосов
/ 23 апреля 2012

Вот решение:

$.post("...", {},
        function(data) {

      // dont forget to add below lines         

         },"json"); 
0 голосов
/ 05 декабря 2011

Обновление до jquery 1.7 решает его

...