我有很长的轮询 Ajax 请求。浏览器,至少但不是最后一个 IE 不会在页面离开时终止请求,因此即使用户访问其他站点,请求也会保持打开和活动状态。多说,浏览器可以成功地处理来自这个连接的响应,尽管它们的结果无处可去。作为调用 htmlxml 连接中止或停止窗口的一般建议显然不起作用。所以我的实现是在卸载时添加额外的 Ajax 调用,以通知服务器连接持有者该页面处于休假状态,因此它可以发送一些虚拟响应,并且浏览器将在之后将连接返回到可用池。这种方法有效,但看起来我过度设计了。不幸的是,我可以在其他一些程序(如 GMAIL)上观察到类似的问题,它也会进行长时间轮询,结果在重新加载后它停止工作。
问问题
404 次
1 回答
0
IE 的 XHR 上有一个abort()
方法可以手动断开它。
这有点hacky,但您可以尝试以下方法:
<body onbeforeunload="AbortMyAjax()">
并使用该方法中止任何活动的长轮询。
作为参考,这是我的一个项目中的一些代码:
$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');
于 2012-10-12T10:03:15.587 回答