2010-04-12 8 views
5

Sto giocando un po 'con raw XmlHttpRequestObjects + Comet Long Polling. (. Di solito, avrei lasciato GWT o in un altro manico quadro di questo per me, ma voglio saperne di più)Cometa (polling lungo) e stato XmlHttpRequest

ho scritto il seguente codice:

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()">... 

ho avvolto la chiamata in longPoll() una dichiarazione if che controlla per status > 0, perché ho riscontrato, che quando esco dalla pagina (sfogliando da qualche altra parte o ricaricandola), viene inviata un'ultima chiamata di cometa non necessaria. [E su Firefox, è anche causa problemi gravi quando si fa una pagina di ricarica, per qualche motivo non ho pienamente capito ancora.]

Domanda: È che status controllare il modo corretto di gestire questo problema, o c'è una soluzione migliore?

+0

Non potresti semplicemente guardare qualsiasi implementazione esistente, ad es. GWT come hai detto, jquery, ecc.? – fig

+0

@ fig-gnuton: Non sono sicuro, se è davvero facile seguire il codice javascript generato (io non sono un guru di javascript ...) –

+0

Se sai abbastanza per essere in grado di giocare con XHR raw, sarai non avere problemi a guardare Jquery o altre librerie. Hanno versioni sorgente che sono completamente commentate. – fig

risposta

3

La mia risposta attuale - fino a prova contraria - è che la soluzione sia corretta.

0

mi piace la semplicità di questo ciclo .... penso che lo script sul lato server deve dormire o atleast loop fino a quando non ottiene nuovi dati prima del suo sondaggio lungo considerato anche se questo è solo normale polling. Vorrei anche aggiungere qualcosa per verificare se il reques non riesce però. avvolgendo che in un tentativo di cattura Bloch dovrebbe fare il trucco