Was bedeuten die verschiedenen Readystates in XMLHttpRequest und wie kann ich sie verwenden?

113

XMLHttpRequesthat 5 readyStates und ich benutze nur 1 von ihnen (die letzte 4).

Wofür sind die anderen und in welchen praktischen Anwendungen kann ich sie verwenden?

Marius
quelle

Antworten:

172

Die vollständige Liste der readyStateWerte lautet:

State  Description
0      The request is not initialized
1      The request has been set up
2      The request has been sent
3      The request is in process
4      The request is complete

(von https://www.w3schools.com/js/js_ajax_http_response.asp )

In der Praxis verwenden Sie fast nie einen von ihnen außer 4.

Bei einigen XMLHttpRequest-Implementierungen können Sie teilweise empfangene Antworten in responseTextwann anzeigen readyState==3, dies wird jedoch nicht allgemein unterstützt und sollte nicht als zuverlässig angesehen werden.

Kieron
quelle
5
Fehler in der Übertragung aktualisieren readyState weiterhin auf 4. Bei einer vollständig unterbrochenen Übertragung wird readyState jedoch auf 0 zurückgesetzt. Ein Fehler in der Übertragung, der auf eine Umleitung zurückzuführen ist, ist also kein "Fehler", und Sie können die Protokollierung ignorieren / Melden des Fehlers, wenn der readyState des xhr 0 ist. Es ist ein bisschen fragil, und Ihr Kilometerstand kann variieren, je nachdem, ob das Protokollieren jedes Ereignisses / Fehlers ein "Muss" oder ein "Schön zu haben" ist. Wenn es das letztere ist, können Sie es sich leisten, das seltene Ereignis zu verlieren, das zusammen mit readyState von 0 ein Fehler sein kann.
Greg Pettit
2
+1 an @MattBianco für seinen Rat. Ich möchte auch hinzufügen, dass das Mozilla Developer Network MDN wohl eine der beliebtesten und vertrauenswürdigsten Referenzseiten für alle Ihre JavaScript / HTML / CSS-Anforderungen ist. Wenn Sie eine Google-Suche durchführen, stellen Sie Ihrer Anfrage "mdn" voran, und Sie sparen sich Kopfschmerzen.
DondeEstaMiCulo
@ GregPettit, können wir Readystate 0 für keine Internetverbindung verwenden, oder es gibt Gründe, warum "Die Anfrage wird nicht initialisiert"
Vishal Sharma
4
Ich bin nicht sicher, @vishalsharma - wie ich mich erinnere, ist der Readystate 0, solange die Anfrage nicht initialisiert wird. Danach aktualisiert jeder andere "Abschluss" (entweder durch Erfolg oder Fehler) den Readystate auf 4. Wenn Sie also das Internet nach dem Start der Übertragung verlieren, wird es auf 4 und nicht auf 0 zurückgesetzt. Wenn es während der Übertragung noch nie Internet gegeben hat versucht, sollte es immer noch bei 0 sein; es wird erst nach dem Handschlag auf 1 verschoben.
Greg Pettit
Die Erklärung für readyState 2 ist falsch - oder zumindest völlig irreführend. Sicher, die Anfrage wurde gesendet, aber dieser Status besagt tatsächlich, dass alle endgültigen Antwortheader empfangen wurden.
Inta
32

kierons antwort enthält w3schools ref. Auf die sich niemand verlässt , gibt die Antwort von Bobince einen Link, der tatsächlich die native Implementierung des IE anzeigt.

Hier ist die Originaldokumentation, die zitiert wird, um richtig zu verstehen, was Readystate darstellt:

Das XMLHttpRequest-Objekt kann sich in mehreren Zuständen befinden. Das readyState-Attribut muss den aktuellen Status zurückgeben, der einer der folgenden Werte sein muss:

UNSENT (numerischer Wert 0)
Das Objekt wurde erstellt.

OPENED (numerischer Wert 1)
Die Methode open () wurde erfolgreich aufgerufen. Während dieses Status können Anforderungsheader mit setRequestHeader () festgelegt werden, und die Anforderung kann mit der send () -Methode erfolgen.

HEADERS_RECEIVED (numerischer Wert 2)
Alle Weiterleitungen (falls vorhanden) wurden befolgt und alle HTTP-Header der endgültigen Antwort wurden empfangen. Es sind jetzt mehrere Antwortmitglieder des Objekts verfügbar.

LOADING (numerischer Wert 3)
Der Hauptteil der Antwortentität wird empfangen.

FERTIG (numerischer Wert 4)
Die Datenübertragung wurde abgeschlossen oder während der Übertragung ist ein Fehler aufgetreten ( z. B. unendliche Weiterleitungen).

Bitte lesen Sie hier: W3C Erklärung von ReadyState

Vishal Sharma
quelle
@CharlesWood, Herausforderung für mich war hier Stackoverflow Markdown Editor nicht akzeptieren beziehen sich auf w3c .. check out daher habe ich kurze URL von goo.gl .... Ich verstehe nicht, warum es mir nicht erlaubt, direkt zu setzen w3c url ...
Vishal Sharma
Huh, ich habe das gerade im Sandkasten ausprobiert und es schien zu funktionieren.
Charles Wood
22

Ursprüngliche endgültige Dokumentation

0, 1Und 2nur verfolgen , wie viele der notwendigen Methoden , um eine Anfrage machen Sie bisher genannt habe.

3teilt Ihnen mit, dass die Antwort des Servers eingegangen ist. Wenn Sie das XMLHttpRequestObjekt jedoch von einer Webseite aus verwenden, können Sie mit diesen Informationen fast nichts (*) tun, da Sie keinen Zugriff auf die erweiterten Eigenschaften haben, die dies zulassen Sie die Teildaten lesen.

readyState 4ist der einzige, der eine Bedeutung hat.

(*: Die einzige denkbare Verwendung, die ich mir vorstellen kann, um nach readyState zu suchen, 3ist, dass es eine Art Leben auf der Serverseite signalisiert, sodass Sie möglicherweise die Zeit verlängern können, die Sie auf eine vollständige Antwort warten, wenn Sie sie erhalten.)

Bobince
quelle
1

onreadystatechange Speichert eine Funktion (oder den Namen einer Funktion), die jedes Mal automatisch aufgerufen wird, wenn sich die readyState-Eigenschaft ändert. readyState Enthält den Status der XMLHttpRequest. Änderungen von 0 auf 4:

0: Anfrage nicht initialisiert

1: Serververbindung hergestellt

2: Anfrage erhalten

3: Verarbeitungsanforderung

4: Anfrage beendet und Antwort ist bereit

Status 200: "OK"

404 Seite nicht gefunden

omertalmi
quelle
0
  • 0: UNSENT Client wurde erstellt. open () noch nicht aufgerufen.
  • 1: OPENED open () wurde aufgerufen.
  • 2: HEADERS_RECEIVED send () wurde aufgerufen, und Header und Status sind verfügbar.
  • 3: LADEN Herunterladen; responseText enthält Teildaten.
  • 4: FERTIG Der Vorgang ist abgeschlossen.

(Von https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState)

Khurshid Ansari
quelle