2015-01-22 13 views
6

Ich versuche, eine Verbindung mit dem Server mithilfe eines XMLHttpRequest -Objekts herzustellen, um Daten zu unterschiedlichen Zeiten zu veröffentlichen. Ich erstelle ein Objekt und „connect“ an den Server wie folgt:Schließt das XMLHttpRequest-Objekt nach der Antwort?

var xhr = new XMLHttpRequest(); 
xhr.open("post", location, true); 
xhr.send(); //Is this send call needed to open the connection? 

Und das zu einem späteren Zeitpunkt, ich nenne so etwas wie diese:

xhr.send("Something to send"); 

jedoch an der Entwicklerkonsole suchen, es scheint, dass nur die anfängliche Anfrage durchging (und erfolgreich geantwortet hat). Die zweite Anfrage scheint nicht zu senden. Ich versuche einzugrenzen, was das Problem sein könnte, also dachte ich: Konnte die Verbindung geschlossen werden, sobald die Antwort empfangen wurde; Warum sollte es offen gehalten werden? Meine Frage: Wird die XMLHttpRequest-Objektverbindung geschlossen, nachdem sie eine Antwort erhalten hat? Wenn ja, was ist der beste Weg, um eine ständig offene Verbindung zu simulieren (um sich ständig neu zu verbinden?)?

+1

Sie müssen ein neues Anfrageobjekt für eine andere Anfrage erstellen. Sie sollten 'send' nicht mehrmals für dasselbe Objekt aufrufen. – Bergi

+0

@Bergi Wäre es nicht praktischer, einfach die offene Methode auf dem Objekt erneut aufzurufen? Oder wird das nicht funktionieren? – chRyNaN

+0

Ich sehe nicht, wie das "praktischer" wäre. Was glaubst du, hast du durch [Wiederverwendung des Objekts] (http://stackoverflow.com/q/11079543/1048572) gewonnen? IIRC, einige ältere Browser hatten ein paar Bugs damit. – Bergi

Antwort

4

Ja, wenn Sie Ihren Server nicht dazu gebracht haben, ihn am Leben zu erhalten, wird er nach dem Senden der Antwort geschlossen.

Vielleicht möchten Sie nach Websockets suchen. Aber wenn Sie nicht mit denen spielen wollen, erstellen Sie einfach eine neue HttpRequest für jede Ihrer "Anfrage".

Grundlegende Kommunikation mit HTTP: 1 Anfrage -> 1 Antwort -> geschlossen!

Bearbeiten: Denken Sie daran, dass Websockets ein neues Feature von HTML5 ist, so dass es nicht für jeden Browser funktioniert und wenn sie für einige Browser funktionieren, sind sie möglicherweise nicht vollständig implementiert.

+0

Ja, ich kenne Websockets. Aber zurück zu XMLHttpRequest, konnte ich nicht einfach das gleiche Objekt wiederverwenden, indem ich einfach wieder auf dieses Objekt aufrufe, oder würde das nicht funktionieren? – chRyNaN

+0

Nein, Sie müssen eine "XLMHttpRequest" für jede "Anfrage", die Sie machen möchten, neu erstellen. –

Verwandte Themen