2010-04-12 57 views
5

我玩弄生XmlHttpRequestObjects +彗星长轮询一点点。 (通常情况下,我让GWT或这对我来说另一个框架处理,但我想更多地了解它)彗星(长轮询)和XMLHttpRequest的状态

我写了下面的代码:

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,因为我遇到过,当我离开页面时(通过浏览其他地方或重新加载),发送最后一次不必要的彗星电话。 [和在Firefox,它做了重新加载页面时,由于某种原因,我不完全了解,甚至还造成严重的问题。]

问:那是status检查正确的方式来处理这个问题,还是有更好的解决方案?

+0

你不能只是看任何现有的实现,例如像你提到的GWT,jquery等? – fig 2010-04-12 19:07:54

+0

@无花果gnuton:我不知道,如果它真的很容易。如果你有足够的知识能够与原始XHR发挥遵循生成的JavaScript代码(我不是一个JavaScript大师...) – 2010-04-12 19:24:44

+0

,你会查看Jquery或其他库不会有任何问题。他们有完整的源代码版本。 – fig 2010-04-12 19:34:52

回答

3

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

0

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