jQuery.ajaxPrefilter()
返回: undefined
jQuery.ajaxPrefilter( [dataTypes ], handler )
描述:在每个请求被发送之前,或者在$.ajax()
加工每个请求之前,操作自定义Ajax选项,或者修改已有的选项。
加入于: 1.5
jQuery.ajaxPrefilter( [dataTypes ], handler )- dataTypes类型:String一个可选的字符串,它包含了一个或多个用空格分隔的dataType。
- handler一个处理函数,用来设置针对将来的Ajax请求的默认值。
一个用$.ajaxPrefilter
注册的典型的预筛选器看起来会如此:
$.ajaxPrefilter(function( options, originalOptions, jqXHR ) { // Modify options, control originalOptions, store jqXHR, etc });
其中
options
是关于HTTP请求的选项originalOptions
是提供给$.ajax()
方法的设置项,不作修改,因此,没有来自ajaxSettings
的默认值。jqXHR
是该请求的jqXHR对象
当自定义的选项必须被处理时,预筛选器可以完美地配合。给定下面的代码,举个例子,如果自定义的abortOnRetry
选项被设置为true,对$.ajax()
的调用将自动中断一个到相同的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上。举个例子,下面的代码把一个请求设置成"script",如果这个URL在一个自定义的isActuallyScript()
函数上有很多特定的属性:
$.ajaxPrefilter(function( options ) { if ( isActuallyScript( options.url ) ) { return "script"; } });
这将确保并非只有这个请求会被视为"script",而且也保证了所有专门附加到script 数据类型预筛选器,也将被应用于它。