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 对象

当需要处理自定义选项时,预过滤器非常适合。例如,给定以下代码,对 $.ajax() 的调用将自动中止对同一 URL 的请求,如果自定义 abortOnRetry 选项设置为 true

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;
}
});

预过滤器还可以用于修改现有选项。例如,以下内容通过 https://mydomain.net/proxy/ 代理跨域请求

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

如果提供了可选的 dataTypes 参数,则预过滤器将仅应用于具有指定 dataTypes 的请求。例如,以下内容仅将给定的预过滤器应用于 JSON 和脚本请求

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

$.ajaxPrefilter() 方法还可以通过返回该 dataType 将请求重定向到另一个 dataType。例如,以下内容如果 URL 在自定义 isActuallyScript() 函数中定义了一些特定属性,则将请求设置为“脚本”

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

这将确保不仅请求被视为“脚本”,而且所有专门附加到脚本 dataType 的预过滤器都将应用于它。