如何在页面离开时终止长轮询 Ajax 请求
Posted
技术标签:
【中文标题】如何在页面离开时终止长轮询 Ajax 请求【英文标题】:How to terminate long poll Ajax request at page leaving 【发布时间】:2012-09-15 00:38:46 【问题描述】:我有长轮询 Ajax 请求。浏览器,至少但不是最后一个 IE 不会在页面离开时终止请求,因此即使用户访问其他站点,请求也会保持打开和活动状态。多说,浏览器可以成功地处理来自这个连接的响应,尽管它们的结果无处可去。作为调用 htmlxml 连接中止或停止窗口的一般建议显然不起作用。 所以我的实现是在卸载时添加额外的 Ajax 调用,以通知服务器连接持有者该页面处于休假状态,因此它可以发送一些虚拟响应,并且浏览器将在之后将连接返回到可用池。这种方法有效,但看起来我过度设计了。不幸的是,我可以在其他一些程序(如 GMAIL)上观察到类似的问题,它也会进行长时间轮询,结果在重新加载后它停止工作。因此,如果有人找到了解决问题的好方法,而无需切换到短轮询或分配连接超时,那么请分享您的解决方案。
【问题讨论】:
【参考方案1】: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');
【讨论】:
以上是关于如何在页面离开时终止长轮询 Ajax 请求的主要内容,如果未能解决你的问题,请参考以下文章