Обработка пользовательских настроек 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"; } });
В этом случае, сработают все фильтры примененные к данному типу данных.