2010-04-12 6 views
5

원시 XmlHttpRequestObjects + Comet Long 폴링으로 조금 놀고 있습니다.Comet (긴 폴링) 및 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() 전화를 포장 : (. 보통, 내가 GWT 또는 나를 위해이의 또 다른 프레임 워크 핸들 할 것입니다,하지만 난 그것에 대해 더 배우고 싶은)

나는 다음과 같은 코드를 작성 status > 0을 확인하는 if 문은 내가 페이지를 떠날 때 (다른 곳을 탐색하거나 다시로드하여) 마지막 불필요한 혜성 호출이 전송된다는 것을 알았습니다. [I가 아직 완전히 이해하지 못하는 어떤 이유로, 페이지를 다시로드를 수행 할 때 그리고 파이어 폭스에, 그것도 심각한 문제가 발생합니다.]

질문 :status이 문제를 처리 할 수있는 올바른 방법을 확인 즉, 아니면 더 나은 해결책이 있습니까?

+0

기존 구현을 살펴 보지 않겠습니까? GWT가 언급 한 것처럼, jquery 등? – fig

+0

@ fig-gnuton : 생성 된 자바 스크립트 코드를 따라하기가 쉽지 않은지 잘 모르겠습니다. (저는 자바 스크립트 전문가가 아닙니다 ...) –

+0

원시 XHR로 재생할 수있을만큼 충분히 알고 있다면 Jquery 나 다른 라이브러리를 보는 데 아무런 문제가 없습니다. 그들은 완전히 주석 처리 된 소스 버전을 가지고 있습니다. – fig

답변

3

현재 나의 답변은 - 입증 된 거짓이 될 때까지 - 해결책이 정확한 것입니다.

0

나는이 루프의 단순함을 좋아한다. 나는 이것이 단지 폴링 일지라도, 고려 된 긴 폴링 전에 새로운 데이터를 얻을 때까지 서버 측 스크립트가 잠들거나 atleast 루프를해야한다고 생각한다. 요청이 실패하더라도 확인하기 위해 추가 할 수도 있습니다. try catch 블로치에서 랩핑하면 트릭을 수행해야합니다.

관련 문제