jQuery.ajaxPrefilter()

jQuery.ajaxPrefilter( [dataTypes ], handler )返回类型:undefined

描述:处理自定义Ajax选择或者在每次请求发送之前、在它们被$.ajax()处理之前,修改已有的选项。

一个典型的用$.ajaxPrefilter()注册的预筛选器看起来像是这样:

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

其中:

  • options是请求选项
  • originalOptions选项是提供给$.ajax()方法的选项,未经修改,因此没有来自ajaxSettings的默认值。
  • jqXHR是请求的jqXHR对象

当需要处理自定义选项时,预筛选器是一个完美的设置。例如,给定下面的代码,如果自定义的abortOnRetry选项被设置为true,对$.ajax()的调用将自动中止一个对相同URL的请求:

1
2
3
4
5
6
7
8
9
10
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/代理跨域请求:

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

如果提供了可选的dataTypes参数,将只对用了指定的dataTypes的请求应用预筛选器。例如,下面只对JSON和Script请求应用给定的预筛选器:

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

$.ajaxPrefilter()方法还可以通过返回dataType,把一个请求重定向到另一个dataType。例如,如果URL具有一些在自定义isActuallyScript()函数中定义的特定的属性,下面代码将会把一个请求设置为“script”:

1
2
3
4
5
$.ajaxPrefilter(function( options ) {
if ( isActuallyScript( options.url ) ) {
return "script";
}
});

这将不仅仅是确保请求被视为“script”,而且所有对script数据类型有效的预筛选器都会应用于它。