2010-04-12 88 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

我喜歡這個循環的簡單....我想在服務器端腳本有睡覺或至少循環,直到它認爲長輪詢之前獲取新的數據,雖然這只是正常的查詢。我還會添加一些內容來檢查請求是否失敗。包裹在一個嘗試捕捉布洛赫應該做的伎倆