通过按钮点击事件取消当前的ajax请求!

时间:2011-07-04 12:04:00

标签: jquery ajax request

如果我的ajax请求花费很长时间连接速度较慢,我想取消。

我在.ajaxStart()时显示叠加层,如果超过5个secons(我使用setInterval管理),则会在叠加层上显示一个按钮,该按钮会取消当前的ajax请求。

这是我的一些代码:

jqXHR = $.ajax({
    url: 'includes/inc_ajax.php',
    type: 'POST',
    data: '&ajax=1&action=7',
    success: function (txt) {
        var cntr = $.parseJSON(txt);
        $("#onlineppl").html(cntr.online);
        $("#todayppl").html(cntr.bugun);
        $("#totalppl").html(cntr.toplam);
    }
});

$("#abortAjax").button({ icons: {secondary: "ui-icon-cancel"} }).click(function() {
    $(jqXHR).abort();
});

我是否必须将$.ajax()函数分配给变量才能中止?我也有很多由ajax调用的ajax请求所以我猜浏览器无法跟踪导致中止方法无法工作的相同var名称。

这是我的第一个问题,我有点困惑。任何帮助赞赏。感谢。

3 个答案:

答案 0 :(得分:1)

好吧,你可以试试:

jqXHR.abort();

没有$()

注意未经测试,我在某处看到了

修改

Aah找到了它:

Stop all active ajax requests in jQuery

答案 1 :(得分:0)

是的,JavaScript是一种基于原型的语言,每个对象实例都有一个指针。当两个ajax调用启动时,你的jqXHR只返回指向第二个ajax调用的指针。这也在this文章中指出,您必须从函数中获取令牌,以便稍后可以引用它以取消它。

答案 2 :(得分:0)

注意 - 收到后,您无法真正阻止AJAX请求在服务器上进行处理。即使浏览器不再侦听响应,服务器也将继续处理请求。除了手动实现某些内容(例如由不同页面设置的会话属性检查)之外,没有可靠的方法使Web服务器停止处理正在进行的请求。

所以基本上服务器仍然会运行,但客户端浏览器会忽略响应 - 请注意,这也会影响您对域的连接限制(默认情况下通常只有两个)。