Обработка пользовательских настроек 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";
  }
});

В этом случае, сработают все фильтры примененные к данному типу данных.

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *