我在玩弄一点点加生XmlHttpRequestObjects +彗星长轮询。 (通常情况下,我让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检查,因为我遇到了,当我离开这个页面(通过浏览其他地方,或者重装吧),最后一个不必要的彗星呼叫发送。 <子> [和火狐,甚至做了重新加载页面时,由于某种原因,我不完全听懂了没有造成严重的问题。

问:是用于status检查正确的方式来处理这个问题,或者是有没有更好的解决办法?

有帮助吗?

解决方案

我现在的回答 - 直到证明是错误的 - 是,该解决方案是正确的。

其他提示

我喜欢这个循环的简单....我想在服务器端脚本有睡眠或至少循环,直到它认为长轮询之前获取新的数据,虽然这只是正常的查询。我还要补充一点,以检查是否reques虽然失败。包裹在一个尝试捕捉布洛赫应该做的伎俩

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top