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

时间:2012-09-15 00:38:47

标签: ajax comet server-push

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

1 个答案:

答案 0 :(得分: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');