jquery - 取消之前的ajax请求jquery

标签 jquery ajax

根据我的阅读,一般解决方案如下:

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

然后是 beforeSend ajax 事件中的 DataRequest.abort()。但是,这会导致不发送任何请求。

我想要实现的是中止任何声明为 DataRequest(例如)的 ajax 操作,并只允许最新的请求继续。目前我有一个按钮,单击该按钮会启动请求并添加加载微调器。如果我多次点击它,我只会看到一堆加载旋转器填满我的页面。我怎样才能防止这种情况发生?

相关代码如下:

beforeSend: function() {
    $('<div class="grid"></div>')
        .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
  });
});

编辑:我已将此功能封装在类似插件的方法调用中:
Cancel a jQuery AJAX call before it returns?

关于jquery - 取消之前的ajax请求jquery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4342438/

相关文章:

javascript - php返回的隐藏字段设置正确,但使用jquery获取值时为 'undefined'

javascript - jQuery 代码适用于 php 循环生成按钮的最后一次迭代

node.js - 您可以在重定向期间将数据发送回 react 应用程序吗

javascript - Ajax 调用仅循环一个对象

使用 iframe 的 ASP.net

javascript - 我想按 jquery 的顺序播放多个 mp3

jquery - 如何使用CSS根据图像的宽度响应式地设置按钮的宽度

javascript - 使用 Javascript 变量设置 cookie 域

jquery - 基于条件的 Ajax 数据

javascript - PHP 返回 jquery/ajax 不工作