Обработка пользовательских настроек ajax-запроса
jQuery.ajaxPrefilter() — обрабатывает пользовательские настройки Ajax запроса или изменяет существующие настройки перед каждой отправкой запроса через $.ajax().
jQuery.ajaxPrefilter( [dataTypes], handler )
- dataTypes — строка, не обязательный аргумент, содержит в себе один или более типов dataTypes, разделенных пробелом;
- handler(options, originalOptions, jqXHR) — функция обратного вызова
- options — настройки текущего запроса;
- originalOptions — настройки по умолчанию (из ajaxSettings);
- jqXHR — объект jqXHR (в версиях до jquery-1.5, вместо него использовался XMLHttpRequest)
Типичный пример регистрации используя jQuery.ajaxPrefilter() выглядит следующим образом:
$.ajaxPrefilter(function( options, originalOptions, jqXHR ) {
// Изменяем настройки (options), проверяем базовые настройки (originalOptions) и объект jqXHR
});
$.ajaxPrefilter удобно использовать для обработки пользовательских параметров. Например, можно воспользоваться настройкой abortOnRetry, при включении которой, незавершенные запросы будут прерываться, если отправляются по тому же адресу:
var currentRequests = {};
$.ajaxPrefilter(function( options, originalOptions, jqXHR ) {
if ( options.abortOnRetry ) {
if ( currentRequests[ options.url ] ) {
currentRequests[ options.url ].abort();
}
currentRequests[ options.url ] = jqXHR;
}
});
$.ajaxPrefilter также может быть использован для изменения текущих параметров. Для примера, рассмотрим кросс-доменный запрос через сервер 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 ) {
// меняем настройки, originalOptions, jqXHR, др.
});
Метод $.ajaxPrefilter может также перенаправить запрос на другой dateType, вернув новое значение dateType. Например, следующий запрос будет выполнен для dataType равным «script», если в URL есть какие-то специфичные параметры, которые отслеживаются в собственной функции isActuallyScript():
$.ajaxPrefilter(function( options ) {
if ( isActuallyScript( options.url ) ) {
return "script";
}
});
В этом случае, сработают все фильтры примененные к данному типу данных.