概述 jQuery.ajaxPrefilter( [dataTypes ], handler )
返回值:undefined
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.