Урок - jQuery.ajaxPrefilter()

Группа вКонтакте
Лицензия: Лицензия Creative Commons.

Метод jQuery.ajaxPrefilter() позволяет установить пользовательский обработчик для изменения Ajax-параметров или существующих параметров, для каждого запроса, до вызова метода jQuery.ajax().

Синтаксис метода jQuery.ajaxPrefilter()

jQuery.ajaxPrefilter( [dataTypes ], handler(options, originalOptions, jqXHR) )

где

  • dataTypes - строка, не обязательный аргумент, содержит в себе один или более типов dataTypes, разделенных пробелом.
  • handler(options, originalOptions, jqXHR) - функция обратного вызова.
  • options - параметры запроса.
  • originalOptions - параметры предоставляемые методу, не измененные и без параметров ajaxSettings.
  • jqXHR - jqXHR-объект текущего запроса.

Типичный пример регистрации используя jQuery.ajaxPrefilter() выглядит следующим образом:

$.ajaxPrefilter( function( options, originalOptions, jqXHR ) {
    // Modify options, control originalOptions, store jqXHR, etc
});

Префильтры прекрасно подходят, для обработки пользовательских параметров. В следующем примере обращение к jQuery.ajax() будет автоматически прерывать запрос на тот же URL, если параметр abortOnRetry установлен в true:

var currentRequests = {};
$.ajaxPrefilter(function( options, originalOptions, jqXHR ) {
    if ( options.abortOnRetry ) {
        if ( currentRequests[ options.url ] ) {
            currentRequests[ options.url ].abort();
        }
        currentRequests[ options.url ] = jqXHR;
    }
});

Префильтры также могут быть использованы для изменения текущих параметров. Например, следующий пример кросс-доменного запроса через http://mydomain.net/proxy/:

$.ajaxPrefilter( function( options ) {
    if ( options.crossDomain ) {
        options.url = "http://mydomain.net/proxy/" + encodeURIComponent( options.url );
        options.crossDomain = false;
    }
});

Если параметр dataTypes не указан, префильтры удут применимы только на запросы с указанными типами данных. Например, следующий запрос применяется только для JSON и к скриптам запросов:

$.ajaxPrefilter( "json script", function( options, originalOptions, jqXHR ) {
    // Modify options, control originalOptions, store jqXHR, etc
});

Метод jQuery.ajaxPrefilter() может также перенаправить запрос на другой dateType и вернет новый dateType. Например, следующий запрос будет выполнен для datType равный "script", если URL содержит ряд специфических  свойств, определенных функцией isActualScript():

$.ajaxPrefilter(function( options ) {
    if ( isActuallyScript( options.url ) ) {
        return "script";
    }
});

Это позволит обеспечить запрос не только типом "script", но и тем что все префильтры для dataType = "script" будут применяться к нему.