Для Ajax-запроса существует ли общая функция для успешного запроса? - PullRequest
0 голосов
/ 01 февраля 2011

У меня есть функция JavaScript:

function doWorkForJobCreate() {
    $.ajax({ url: '<%:ConfigurationManager.AppSettings["SiteRoot"]%>/Job/JobCreate',
        success: function (data, status, req) {
            if (!processFKErrorHeader(req.getResponseHeader("fkerror"))) return;
            $("#fktabsCreate").html(data);

        }
    })
}

и функция обработки ошибок:

   function processFKErrorHeader(fkerror){
   // alert to user
   // refresh the page
   }

Интересно, есть ли способ автоматического вызова этой функции для любого успеха Ajax-запроса?function?

Таким образом, мне не нужно вставлять процессор ошибок в каждую функцию успеха Ajax.

Ответы [ 3 ]

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

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

Обработчик получает объект settings, который использовался для настройки Ajax-запроса. Возможно вы можете переопределить обработчик success там (не тестировался):

$(document).ajaxSuccess(function(e, xhr, settings) {
    if (!processFKErrorHeader(req.getResponseHeader("fkerror"))) {
        settings.success = function() {};
    }
});

Обновление: Проблема здесь в том, что я не знаю, существует ли гарантированный порядок выполнения обработчиков.

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

Вы ищете событие ajaxSuccess , которое транслируется всем элементам.

Например:

$(document).ajaxSuccess(function(e, xhr, settings) {
    ...
});
0 голосов
/ 29 марта 2011

требуется время, чтобы понять, но вот решение:

в источнике jquery-1.4.2.js, добавьте "мой код":

function success() {

 if ( !processFKErrorHeader(xhr.getResponseHeader("fkerror")) ) //mycode
  return; //mycode

 // If a local callback was specified, fire it and pass it the data
 if ( s.success ) {
  s.success.call( callbackContext, data, status, xhr );
 }

 // Fire the global callback
 if ( s.global ) {
  trigger( "ajaxSuccess", [xhr, s] );
 }

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