Que signifient les différents readystates dans XMLHttpRequest et comment puis-je les utiliser?

113

XMLHttpRequesta 5 readyStates, et j'utilise seulement 1 d'entre eux (le dernier, 4).

À quoi servent les autres et dans quelles applications pratiques puis-je les utiliser?

Marius
la source

Réponses:

172

La liste complète des readyStatevaleurs est:

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

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

En pratique, vous n'en utilisez presque jamais, sauf 4.

Certaines implémentations de XMLHttpRequest peuvent vous permettre de voir les réponses partiellement reçues dans responseTextwhen readyState==3, mais cela n'est pas universellement pris en charge et ne doit pas être invoqué.

Kieron
la source
5
Les erreurs dans le transfert mettent toujours à jour readyState à 4. Cependant, un transfert complètement interrompu réinitialisera readyState à 0. Ainsi, une erreur dans le transfert résultant d'une redirection n'est pas vraiment une "erreur" et vous pouvez choisir d'ignorer la journalisation / signaler l'erreur si le readyState du xhr est 0. C'est un peu fragile, et votre kilométrage peut varier selon que la journalisation de chaque événement / erreur est un "must have" ou un "nice to have". Si c'est le dernier cas, vous pouvez vous permettre de perdre l'événement rare qui peut être une erreur avec readyState de 0.
Greg Pettit
2
+1 à @MattBianco pour ses conseils. Je voudrais également ajouter que le Mozilla Developer Network MDN est sans doute l'un des sites de référence les plus populaires et les plus fiables pour tous vos besoins JavaScript / HTML / CSS. Lorsque vous effectuez une recherche sur Google, ajoutez «mdn» à votre requête et vous vous épargnerez quelques maux de tête.
DondeEstaMiCulo
@GregPettit, pouvons-nous utiliser readystate 0, sans connexion Internet, ou il existe des raisons pour lesquelles "La demande n'est pas initialisée"
Vishal Sharma
4
Je ne suis pas sûr, @vishalsharma - si je me souviens bien, le readystate est à 0 tant que la requête n'est pas initialisée. Après cela, tout autre "achèvement" (soit par succès, soit par erreur) mettra à jour le readystate à 4. Donc, perdre Internet après le début du transfert le retournera à 4, pas à 0. S'il n'y a jamais eu Internet lorsque le transfert est tenté, il devrait toujours être à 0; il ne passera à 1 qu'après la poignée de main.
Greg Pettit
L'explication de readyState 2 est fausse - ou du moins complètement trompeuse. Shure la demande a été envoyée, mais cet état indique en fait que tous les en-têtes de réponse finaux ont été reçus.
entre
32

Kieron de réponse de ref contient de W3Schools. auquel personne ne compte, la réponse de bobince donne un lien, qui raconte en fait l'implémentation native d'IE,

voici donc la documentation originale citée pour bien comprendre ce que représente readystate:

L'objet XMLHttpRequest peut être dans plusieurs états. L'attribut readyState doit renvoyer l'état actuel, qui doit être l'une des valeurs suivantes:

UNSENT (valeur numérique 0)
L'objet a été construit.

OUVERT (valeur numérique 1)
La méthode open () a été appelée avec succès. Pendant cet état, les en-têtes de requête peuvent être définis à l'aide de setRequestHeader () et la requête peut être effectuée à l'aide de la méthode send ().

HEADERS_RECEIVED (valeur numérique 2)
Toutes les redirections (le cas échéant) ont été suivies et tous les en-têtes HTTP de la réponse finale ont été reçus. Plusieurs membres de réponse de l'objet sont désormais disponibles.

CHARGEMENT (valeur numérique 3)
Le corps de l'entité de réponse est en cours de réception.

DONE (valeur numérique 4)
Le transfert de données est terminé ou quelque chose s'est mal passé pendant le transfert (par exemple, des redirections infinies).

Veuillez lire ici: Explication du W3C sur ReadyState

Vishal Sharma
la source
@CharlesWood, le défi pour moi était ici que l'éditeur de markdown de stackoverflow n'acceptera pas de se référer à w3c .. vérifiez donc je mets une URL courte de goo.gl .... je ne comprends pas pourquoi il ne me permet pas de mettre directement w3c url ...
Vishal Sharma
Huh, je viens d'essayer ça dans le bac à sable et ça a semblé marcher.
Charles Wood
22

Documentation définitive originale

0, 1et2 suivre seulement le nombre des méthodes nécessaires pour faire une demande , vous avez appelé jusqu'à présent.

3 vous indique que la réponse du serveur a commencé à arriver. Mais lorsque vous utilisez le XMLHttpRequest objet à partir d'une page Web, vous ne pouvez presque rien (*) faire avec ces informations, car vous n'avez pas accès aux propriétés étendues qui permettent vous de lire les données partielles.

readyState 4est le seul qui ait un sens.

(*: la seule utilisation imaginable à laquelle je peux penser pour vérifier readyState 3est qu'il signale une forme de vie du côté du serveur, vous pouvez donc augmenter le temps d'attente d'une réponse complète lorsque vous la recevez.)

bobince
la source
1

onreadystatechange Stocke une fonction (ou le nom d'une fonction) à appeler automatiquement chaque fois que la propriété readyState change. readyState Contient le statut de XMLHttpRequest. Changements de 0 à 4:

0: requête non initialisée

1: connexion au serveur établie

2: demande reçue

3: traitement de la demande

4: la demande est terminée et la réponse est prête

état 200: "OK"

404 Page non trouvée

omertalmi
la source
0
  • 0: UNSENT Client a été créé. open () pas encore appelé.
  • 1: OPENED open () a été appelé.
  • 2: HEADERS_RECEIVED send () a été appelé, et les en-têtes et l'état sont disponibles.
  • 3: CHARGEMENT Téléchargement; responseText contient des données partielles.
  • 4: DONE L'opération est terminée.

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

Khurshid Ansari
la source