# jQuery.ajaxPrefilter()

## jQuery.ajaxPrefilter ( dataTypes, handler(options, originalOptions, jqXHR) ) Returns: undefined version added: 1.5

- dataTypes
  Type: String
  An optional string containing one or more space-separated dataTypes

- handler(options, originalOptions, jqXHR)
  Type: Function
  A handler to set default values for future Ajax requests.

Description: Handle custom Ajax options or modify existing options before each request is sent and before they are processed by $.ajax().

A typical prefilter registration using `$.ajaxPrefilter()` looks like this:

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

where:

- `options` are the request options
- `originalOptions` are the options as provided to the ajax method, unmodified and, thus, without defaults from `ajaxSettings`
- `jqXHR` is the jqXHR object of the request

Prefilters are a perfect fit when custom options need to be handled. Given the following code, for example, a call to `$.ajax()` would automatically abort a request to the same URL if the custom `abortOnRetry` option is set to `true`:

    var currentRequests = {};

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

Prefilters can also be used to modify existing options. For example, the following proxies cross-domain requests through http://mydomain.net/proxy/:

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

If the optional `dataTypes` argument is supplied, the prefilter will be only be applied to requests with the indicated dataTypes. For example, the following only applies the given prefilter to JSON and script requests:

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

The `$.ajaxPrefilter()` method can also redirect a request to another dataType by returning that dataType. For example, the following sets a request as "script" if the URL has some specific properties defined in a custom `isActuallyScript()` function:

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

This would ensure not only that the request is considered "script" but also that all the prefilters specifically attached to the script dataType would be applied to it.