返回值: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 数据类型有效的预前过滤器,同样也会对该请求起作用。