取消之前的ajax请求jquery

从我读到的一般解决方案到此如下:

var DataRequest = $.ajax({ /* ... */ }); 

然后在beforeSend ajax事件中使用DataRequest.abort() 。 但是,这会导致发送NO请求。

我想要实现的是中止任何声明为DataRequest的ajax操作(例如),并且只允许最新的请求继续进行。 目前我有一个按钮,当点击它时启动一个请求并添加一个加载微调器。 如果我多次点击它,我只是得到一堆加载的微调填充我的页面。 我怎么能阻止这个?

这是相关的代码:

 beforeSend: function() { $('
') .attr('id', 'loading') .hide() .insertBefore('#output') .fadeIn(); }, success: function(data) { $('#loading').hide(function () { $(this).remove(); }); }

这是我需要多个请求时才使用的模式,只处理最后一个:

 var fooXHR, fooCounter=0; $(...).bind( 'someEvent', function(){ // Do the Right Thing to indicate that we don't care about the request anymore if (fooXHR) fooXHR.abort(); var token = ++fooCounter; fooXHR = $.get( ..., function(data){ // Even aborted XHR may cause the callback to be invoked if (token != fooCounter) return; // At this point we know that we're using the data from the latest request }); }); 

编辑 :我已经在这个类似插件的方法调用中包装了这个function:
在返回之前取消jQuery AJAX调用?

为什么不将加载微调器作为标记的一部分并隐藏(或插入页面加载)。 然后在beforeSend中显示代码以显示它,这样,当多次按下按钮时,您将不会插入多个微调器。

 beforeSend:function(){
    $('#装载“)显示()。
 });

除非您有意多次按下该按钮…请在第一次单击后禁用该按钮。 比试图中止最后一个ajax请求简单得多。