ajax - 如何在页面离开时终止长轮询 Ajax 请求

标签 ajax comet server-push

我有长轮询 Ajax 请求。浏览器,至少但不是最后一个 IE 不会在页面离开时终止请求,因此即使用户访问其他站点,请求仍保持打开和事件状态。多说一点,浏览器可以成功处理来自该连接的响应,尽管它们的结果无处可去。一般建议调用 htmlxml 连接中止或停止窗口显然不起作用。 所以我的实现是在卸载时添加额外的 Ajax 调用以通知服务器连接持有者页面正在休假,因此它可以发送一些虚拟响应并且浏览器将连接返回到可用池。这种方法有效,但对我来说是过度设计的。不幸的是,我可以观察到一些其他程序的类似问题,例如 GMAIL,它也进行长轮询,结果在重新加载后停止工作。因此,如果有人找到了解决问题的好方法而无需切换到短轮询或分配连接超时,那么请分享您的解决方案。

最佳答案

在 IE 的 XHR 上有一个 abort() 方法可以手动断开它。

这有点 hacky,但你可以尝试类似的方法:

<body onbeforeunload="AbortMyAjax()">

并使用该方法中止任何事件的长轮询。

作为引用,这里有一些来 self 的项目的代码:

$this.lp = null;
function _LongPoll() {
    $.ajaxSetup({ cache: false });
    $this.lp = $.getJSON(m_PollUrl, _LongPollCallback);
}

并且在卸载前的正文中:

if(!!QueueManager.lp && !!QueueManager.lp.abort) QueueManager.lp.abort('PAGE_CLOSED');

关于ajax - 如何在页面离开时终止长轮询 Ajax 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12433599/

相关文章:

java - 在 glassfish 服务器中启用 cometd

django - 在服务器和客户端之间设置实时推送 API channel 的好方法

java - 服务器推送使用java

javascript - Ajax 错误: SyntaxError: Unexpected token < error

javascript - Watir 不触发 Jquery 事件处理程序

javascript - 带有 EXTJ 的 Ajax 文本字段

ajax - 如何从网页调用此 Comets 应用程序

javascript - 使用 $.get() 显示菜单和子菜单

php - 如何防止 chrome 使用 Comet 获取 'Aw snap!' ?

javascript - 在 Firefox 下按 Escape 会终止我的 Ajax 请求。我想阻止这个