Перехватывать функцию обратного вызова jQuery.ajax «success» перед выполнением - PullRequest
1 голос
/ 09 марта 2012

Я создал веб-приложение, которое интенсивно использует функцию jQuery.ajax () на десятках различных страниц.Естественно, каждому использованию jQuery.ajax () передается объект конфигурации с функцией, которая служит в качестве обратного вызова для свойства 'success'.

Я столкнулся с ситуацией, в которой я хотел бы глобальновыполнить определенное действие на нескольких страницах, если сервер возвращает определенный код ошибки для любого заданного запроса ajax.Я думаю о том, чтобы как-то переопределить часть библиотеки jQuery, включив в заголовок моих страниц javascript, который будет выполнять операцию условной проверки, а затем продолжать выполнять любую функцию обратного вызова, переданную в объекте конфигурации.Это возможно?В настоящее время я просматриваю исходный код библиотеки jQuery, чтобы узнать, смогу ли я это сделать.

Ответы [ 3 ]

3 голосов
/ 09 марта 2012

Я думаю, вам нужно взглянуть на глобальные обработчики событий Ajax.

http://api.jquery.com/category/ajax/global-ajax-event-handlers/

2 голосов
/ 14 апреля 2014

В jQuery 1.5+ это можно сделать с помощью опции converters для $.ajax. Обычно предполагается, что преобразователи просто преобразуют данные, полученные с веб-сервера, и передают их обратному вызову, но при желании вы можете запустить другой код.

Перетащите этот код в js-файл, который встроен во все ваши страницы.

$.ajaxSetup({
    // the converter option is a list of dataType-to-dataType conversion functions 
    // example: converters['text json'] is a function that accepts text and returns an object
    // note: to redefine any single converter, you must redefine all of them
    converters: {
        "text json": function (text) {
            // NOTE: this converter must return a parsed version of the json                
            var result = jQuery.parseJSON(text);
            if (result.errorMessage) {
                // catch the error message and alert
                alert(result.errorMessage)
            }
            return result;            
        },
        "text html": true,          
        "* text": window.String,
        "text xml": jQuery.parseXML
    }
});

Полный пример: http://jsfiddle.net/waltbosz/8a8fZ/

0 голосов
/ 13 июля 2015

В итоге я переопределил успешный обратный вызов глобальным способом, используя $.ajaxSetup, например:

$.ajaxSetup({
    beforeSend: function(xhr, options) {
        var originalSuccess = options.success
        options.success = function(data, textStatus, jqXhr) {
            // trigger some sort of event here for interested listeners
            originalSuccess.apply(this, arguments)
        }
    }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...