我正在尝试使用原始的XmlHttpRequestObject + Comet Long Polling技术进行一些调试。通常情况下,我会让GWT或其他框架来处理,但我想更多地了解这个技术。
我编写了以下代码:
我编写了以下代码:
function longPoll() {
var xhr = createXHR(); // Creates an XmlHttpRequestObject
xhr.open('GET', 'LongPollServlet', true);
xhr.onreadystatechange = function () {
if (xhr.readyState == 4) {
if (xhr.status == 200) {
...
}
if (xhr.status > 0) {
longPoll();
}
}
}
xhr.send(null);
}
...
<body onload="javascript:longPoll()">...
我在longPoll()
调用中加入了一个if语句,它检查status > 0
,因为我发现当我离开页面(通过浏览其他页面或重新加载页面)时,会发送最后一个不必要的comet调用。[而且在Firefox上,这甚至会在重新加载页面时引起严重问题,原因我还没有完全理解。]
问题:这个status
检查是处理这个问题的正确方法吗?还是有更好的解决方案?
status > 0
。毕竟,只有当请求完成时,onreadystatechange
函数才会被调用,并且readyState == 4
。你是如何看到“最后一个不必要的彗星调用被发送”的?而你所说的 Firefox 中的严重问题是什么?也许另一个答案中的测试用例对你有帮助(使用 jQuery,但本质上是相同的):https://dev59.com/p3E85IYBdhLWcg3wl0nF#2713567 - Marcel Korpel