如果我的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名称。
这是我的第一个问题,我有点困惑。任何帮助赞赏。感谢。
答案 0 :(得分:1)
答案 1 :(得分:0)
是的,JavaScript是一种基于原型的语言,每个对象实例都有一个指针。当两个ajax调用启动时,你的jqXHR只返回指向第二个ajax调用的指针。这也在this文章中指出,您必须从函数中获取令牌,以便稍后可以引用它以取消它。
答案 2 :(得分:0)
注意 - 收到后,您无法真正阻止AJAX请求在服务器上进行处理。即使浏览器不再侦听响应,服务器也将继续处理请求。除了手动实现某些内容(例如由不同页面设置的会话属性检查)之外,没有可靠的方法使Web服务器停止处理正在进行的请求。
所以基本上服务器仍然会运行,但客户端浏览器会忽略响应 - 请注意,这也会影响您对域的连接限制(默认情况下通常只有两个)。