Использование одного и того же обратного вызова для двух запросов ajax () приводит к "parsererror" - PullRequest
1 голос
/ 08 июля 2011

Итак, я некоторое время боролся с Javascript, и у меня странная ошибка, которая, вероятно, является чем-то простым.У меня есть запрос ajax, например, так:

$.ajax({
    url: 'http://www.hahaha.com/api/v3/acts',
    crossDomain: true,
    jsonpCallback: 'handlejson',
    async: false,
    jsonp: 'callback',
    dataType: 'jsonp',
    type: 'GET',
    success: handleActs,
    error: handleError
});

, который работает нормально и без проблем вызывает обратный вызов.Теперь, если я добавлю этот запрос прямо под:

$.ajax({
    url: 'http://www.hahaha.com/api/v3/performances',
    crossDomain: true,
    async: false,
    jsonpCallback: 'handlejson',
    jsonp: 'callback',
    dataType: 'jsonp',
    type: 'GET',
    success: handlePerformances,
    error: handleError
});

, я получу «parsererror» в первом запросе, а второй будет выполнен успешно.У кого-нибудь есть идеи, почему он это делает?Может ли jsonpCallback вызывать только один запрос?

1 Ответ

2 голосов
/ 08 июля 2011

Я не думаю, что это работает, когда два вызова AJAX ссылаются на один и тот же jsonpCallback - я думаю, что jQuery помещает функцию обратного вызова в глобальное пространство имен, затем удаляет при вызове - так что не будет рядом для второго набора загруженных данных. Я бы не подумал, что это будет иметь значение с async, установленным на false, но похоже, что это так.

Сначала я не мог понять, почему вы вообще устанавливали jsonpCallback, но, похоже, что тестирование показывает, что используемый вами API удаляет что-то кроме [a-z] из имени обратного вызова :(. Так что вы можете попробуйте это с jsonpCallback, установленным на 'handlejsona' при первом вызове и 'handlejsonb' при втором вызове.

Этот подход, кажется, работает здесь: http://jsfiddle.net/nrabinowitz/H7zYt/

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