2010-04-12 9 views
5

Ich spiele ein wenig mit rohen XmlHttpRequestObjects + Comet Long Polling. (. Normalerweise würde ich lassen GWT oder ein anderer Rahmen Griff für mich, aber ich will mehr darüber erfahren, es)Comet (lange Polling) und XmlHttpRequest Status

Ich schrieb den folgenden Code:

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

Ich wickelte den longPoll() Anruf in Eine if-Anweisung, die nach status > 0 sucht, weil ich festgestellt habe, dass, wenn ich die Seite verlasse (indem ich irgendwo anders blogge oder sie neu lade), ein letzter unnötiger Komet-Aufruf gesendet wird. [Und auf Firefox, es sogar schwere Probleme verursacht, wenn eine Seite neu geladen zu tun, ich aus irgendeinem Grunde noch nicht vollständig verstehen.]

Frage: Ist die status die richtige Art und Weise zu überprüfen, dieses Problem zu umgehen, oder gibt es eine bessere lösung?

+0

Könnten Sie nicht nur eine vorhandene Implementierung, z. GWT wie du erwähnt hast, jquery, etc? – fig

+0

@ fig-gnuton: Ich bin nicht sicher, ob es wirklich einfach ist, generierten JavaScript-Code zu folgen (Ich bin kein JavaScript-Guru ...) –

+0

Wenn Sie genug wissen, um mit XHR zu spielen, werden Sie habe kein Problem, Jquery oder andere Bibliotheken zu betrachten. Sie haben Quellenversionen, die vollständig kommentiert sind. – fig

Antwort

3

Meine aktuelle Antwort - bis bewiesen falsch - ist, dass die Lösung korrekt ist.

0

Ich mag die Einfachheit dieser Schleife .... Ich denke, das serverseitige Skript muss schlafen oder atleast Schleife, bis es neue Daten vor seiner in Betracht gezogen langen Abfrage erhält, obwohl dies nur normale Abfrage ist. Ich würde auch etwas hinzufügen, um zu überprüfen, ob die Requests fehlschlagen. Wickeln, dass in einem Versuch fangen Bloch sollte den Trick