Hallo Raik,
was kann man mit den readyState's 1-3 anfangen? haben die irgend einen praktischen nutzen?
Laut der „reinen Theorie“ lauten die readyStates ja so:
0 (Initialized) - Objekt existiert, open() noch nicht aufgerufen.
1 (Loading) - open() aufgerufen, aber send() noch nicht aufgerufen
2 (Loaded) - send() aufgerufen
3 (Interactice) - Daten kommen langsam rein, man könnte schon den responseText abfragen
4 (Complete) - Alles fertig.
Das geschieht auch so ungefähr in den Browsern, auch wenn diese sich noch uneinig darüber scheinen, wann das Event onreadystatechange feuern muss, wie Peter-Paul Koch die Tage in seinem Quirksblog ausführlich beschreibt.
Wofür sind nun die einzelnen readyStates gut? Mal in zeitlich umgekehrter Reihenfolge:
readyState 4 ist natürlich klar.
readyState 3 ermöglicht einen, schonmal auf Daten zu zugreifen, ohne dass man darauf warten muss, dass versucht wurde, aus der vermeintlichen XML einen DOM-Baum zu parsen. Gut für Byteströme, z.B. reinen Text.
readyState 2 ermöglicht einen, schon mal auf Status-Code und Status-Text des HTTP-Requests zu zugreifen, jedenfalls meiner Erfahrung nach (1). Dies ist zum Beispiel praktisch, wenn es um ungewöhnlichere Status-Codes geht. Dies können selbstgemachte Fehlercodes sein, die die HTTP Spezifikation erlaubt, das kann aber auch ein simpler 304 Not Modified beim Cachen sein. Bei größeren Dokumenten, die dann nicht noch mal eingelesen werden sollen, wäre es vielleicht sinnvoll schon bei diesem readyState und bei diesem HTTP Status abort() aufzurufen.
readyState 1 ist mir selber ein Mysterium. Alles war ich mir vorstellen kann, wäre höchstens eine Art introspektive Automatisierung des Requests, wenn open() aufgerufen wird wird automatisch noch einiges zur Konfiguration, wie die Setzung von Headern oder ganz witzig, der automatische Aufruf von send(). Vielleicht sinnvoll, wenn man aus irgendwelchen Gründen nur eine Methode (open) Aufrufen kann, allerdings kann ich mir keinerlei Einsatzzweck vorstellen.
readyState 0 dürfte klar sein.
(1) Meine Erfahrungen: Ich kann das natürlich nicht verallgemeinern, aber meinen Tests zufolge tritt immer dieser Reihenfolge auf, sowohl bei kleinen, als auch bei sehr großen zu ladenden Dokumenten. Natürlich ist es schwierig, so etwas in einem asynchronen Modell zu „messen“, auf komplexere Messmechanismen hatte ich damals keine Lust, deswegen hatte ich nur eine sehr simple „Messmethode“. Und dazu kommen dann noch die Problemchen mit dem in diversen Browser unterschiedlich feuernden Event, wie oben bei Quirksmode geschildert.
gut, bei einem langsamen server und grossen dateien kann man evtl. statusinformationen ausgeben, um sich die zeit zu vertreiben, aber gibts da auch was wirklich nützliches?
Oh, aus dem Gesichtspunkt der Softwareergonomie ist eine Rückmeldung, dass etwas passiert sehr nützlich. Und wenn es nur eine Sanduhr, bzw. ein Sat1-Ball ist. ;) Soll heißen: Wenn es zwischen 0 und 4 nicht noch mindestens einen readyState gegeben hätte, wäre das doch recht doof gewesen.
Tim