注册一个典型使用$.ajaxPrefilter()
的预过滤器,看起来像这样:
- $.ajaxPrefilter( function( options, originalOptions, jqXHR ) {
- // Modify options, control originalOptions, store jqXHR, etc
- });
以下的情况下:
-
options
是请求的选项 -
originalOptions
值作为提供给Ajax方法未经修改的选项,因此,没有ajaxSettings
设置中的默认值 -
jqXHR
是请求的jqXHR对象
当自定义选项,需要提前处理,预过滤器(Prefilters)是一个完美的选择。给定下面的代码, 例如,如果自定义abortOnRetry
选项被设置为true
,那么调用$.ajax()
会自动中止请求相同的URL:
- var currentRequests = {};
- $.ajaxPrefilter(function( options, originalOptions, jqXHR ) {
- if ( options.abortOnRetry ) {<span style="color:#cc0000;">//发现这个判断好像没什么卵用</span>
- if ( currentRequests[ options.url ] ) {
- currentRequests[ options.url ].abort();
- }
- currentRequests[ options.url ] = jqXHR;
- }
- });
- 直接改写了一下:
- <pre name="code" class="javascript">
- $.ajaxPrefilter(function( options, originalOptions, jqXHR ) {
- var key = options.url;
- if(!currentRequests[key]){
- currentRequests[key]=jqXHR;
- }else{
- jqXHR.abort();//放弃后触发的提交
- // currentRequests[key].abort();//放弃之前触发的提交
- }
- });