返回值:undefinedjQuery.ajaxPrefilter([dataTypes], handler(options, originalOptions, jqXHR))
预前过滤器,用于在每个请求发送之前,并且在 $.ajax() 处理之前,设置自定义 Ajax 选项或者修改已经存在的选项。
-
1.5 新增jQuery.ajaxPrefilter([dataTypes], handler(options, originalOptions, jqXHR))
dataTypes (String) 可选参数,一个可选的字符串,包含一个或多个用空格分隔的数据类型(dataTypes)。handler(options, originalOptions, jqXHR) (Function) 预前过滤器,用于设置今后 Ajax 请求用的默认值
下面是一个典型的注册预前过滤器的例子:
$.ajaxPrefilter( function( options, originalOptions, jqXHR ) {
// Modify options, control originalOptions, store jqXHR, etc
});
参数说明:
-
options是请求选项 -
originalOptions是提供给 ajax 方法的未经修改的选项。因此,没有ajaxSettings设置中的默认值 -
jqXHR是请求用的 jqXHR 对象
预前过滤器非常适用于需要提前处理自定义选项的情况。例如,下面的代码在调用 $.ajax() 时,如果将 abortOnRetry 选项设置为 true,那么就会自动取消对相同 URL 的请求:
var currentRequests = {};
$.ajaxPrefilter(function( options, originalOptions, jqXHR ) {
if ( options.abortOnRetry ) {
if ( currentRequests[ options.url ] ) {
currentRequests[ options.url ].abort();
}
currentRequests[ options.url ] = jqXHR;
}
});
预前过滤器同样可用于修改已经存在的选项。例如,通过 http://mydomain.net/proxy/ 进行代理跨域请求:
$.ajaxPrefilter( function( options ) {
if ( options.crossDomain ) {
options.url = "http://mydomain.net/proxy/" + encodeURIComponent( options.url );
options.crossDomain = false;
}
});
如果提供了可选的 dataTypes 参数,那么预前过滤器只会对满足指定 dataTypes 的请求有效。例如,指定一个只对 JSON 和 script 请求有效的预前过滤器:
$.ajaxPrefilter( "json script", function( options, originalOptions, jqXHR ) {
// Modify options, control originalOptions, store jqXHR, etc
});
$.ajaxPrefilter() 方法也可以通过返回 dataType 的方式,重定向一个请求到返回的 dataType 类型。例如下面的例子,如果 URL 中含有在 isActuallyScript() 函数中设定的指定属性,那么就将请求设置成 "script" 请求:
$.ajaxPrefilter(function( options ) {
if ( isActuallyScript( options.url ) ) {
return "script";
}
});
这不但保证了请求被认为是 "script" 类型的,而且也保证了所有对 script 数据类型有效的预前过滤器,同样也会对该请求起作用。