¿Qué significan los diferentes readystates en XMLHttpRequest y cómo puedo usarlos?

Respuestas:

172

La lista completa de readyStatevalores es:

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

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

En la práctica, casi nunca usa ninguno de ellos, excepto el 4.

Algunas implementaciones de XMLHttpRequest pueden permitirle ver respuestas recibidas parcialmente en responseTextcuándo readyState==3, pero esto no es compatible universalmente y no se debe confiar en ello.

Kieron
fuente
5
Los errores en la transferencia aún actualizan readyState a 4. Sin embargo, una transferencia completamente interrumpida restablecerá readyState a 0. Por lo tanto, un error en la transferencia que sea el resultado de una redirección no es realmente un "error" y puede optar por ignorar el registro / reportar el error si el readyState del xhr es 0. Es un poco frágil y su kilometraje puede variar dependiendo de si registrar cada evento / error es "imprescindible" o "bueno tenerlo". Si es el último, puede permitirse perder el evento raro que puede ser un error junto con readyState de 0.
Greg Pettit
2
+1 a @MattBianco por su consejo. También me gustaría agregar que Mozilla Developer Network MDN es posiblemente uno de los sitios de referencia más populares y confiables que existen para todas sus necesidades de JavaScript / HTML / CSS. Al hacer una búsqueda en Google, anteponga "mdn" a su consulta y se ahorrará algunos dolores de cabeza.
DondeEstaMiCulo
@GregPettit, ¿podemos usar readystate 0, sin conexión a Internet, o hay alguna razón por la que existe "La solicitud no se inicializa"
Vishal Sharma
4
No estoy seguro, @vishalsharma; según recuerdo, el estado listo es 0 siempre que la solicitud no esté inicializada. Después de eso, cualquier otra "finalización" (ya sea por éxito o error) actualizará el estado listo a 4. Por lo tanto, perder Internet después de que comience la transferencia lo cambiará a 4, no a 0. Si nunca ha habido Internet cuando se realiza la transferencia intentado, todavía debería estar en 0; solo se moverá a 1 después del apretón de manos.
Greg Pettit
La explicación de readyState 2 es incorrecta, o al menos completamente engañosa. Shure se envió la solicitud, pero ese estado en realidad dice que se recibieron todos los encabezados de respuesta final.
inta
32

kieron 's respuesta contiene w3schools ref. en el que nadie confía, la respuesta de bobince proporciona un enlace, que en realidad dice la implementación nativa de IE

así que aquí está la documentación original citada para comprender correctamente lo que representa readystate:

El objeto XMLHttpRequest puede estar en varios estados. El atributo readyState debe devolver el estado actual, que debe ser uno de los siguientes valores:

UNSENT (valor numérico 0)
El objeto ha sido construido.

OPENED (valor numérico 1)
El método open () se ha invocado correctamente. Durante este estado, los encabezados de solicitud se pueden configurar usando setRequestHeader () y la solicitud se puede realizar usando el método send ().

HEADERS_RECEIVED (valor numérico 2)
Se han seguido todos los redireccionamientos (si los hay) y se han recibido todos los encabezados HTTP de la respuesta final. Ya están disponibles varios miembros de respuesta del objeto.

LOADING (valor numérico 3)
Se está recibiendo el cuerpo de la entidad de respuesta.

DONE (valor numérico 4)
La transferencia de datos se completó o algo salió mal durante la transferencia (por ejemplo, redireccionamientos infinitos).

Lea aquí: Explicación del W3C de ReadyState

Vishal Sharma
fuente
@CharlesWood, el desafío para mí estaba aquí. El editor de rebajas de stackoverflow no acepta referirse a w3c ... echa un vistazo, por lo tanto, puse una URL corta de goo.gl ... no entiendo por qué no me permite poner directamente w3c url ...
Vishal Sharma
Eh, acabo de probar eso en la caja de arena y pareció funcionar.
Charles Wood
22

Documentación original definitiva

0, 1Y 2solamente un seguimiento de cómo muchos de los métodos necesarios para realizar una solicitud que ha llamado hasta ahora.

3le dice que la respuesta del servidor ha comenzado a llegar. Pero cuando está utilizando el XMLHttpRequestobjeto de una página web, no hay casi nada (*) que pueda hacer con esa información, ya que no tiene acceso a las propiedades extendidas que permiten que lea los datos parciales.

readyState 4es el único que tiene algún significado.

(*: el único uso concebible en el que puedo pensar para verificar readyState 3es que indica alguna forma de vida en el extremo del servidor, por lo que posiblemente podría aumentar la cantidad de tiempo que espera una respuesta completa cuando la reciba).

bobince
fuente
1

onreadystatechange Almacena una función (o el nombre de una función) que se llamará automáticamente cada vez que cambie la propiedad readyState readyState Mantiene el estado de XMLHttpRequest. Cambios de 0 a 4:

0: solicitud no inicializada

1: conexión al servidor establecida

2: solicitud recibida

3: solicitud de procesamiento

4: solicitud finalizada y respuesta lista

estado 200: "OK"

404 Pagina no encontrada

omertalmi
fuente
0
  • 0: Se ha creado el cliente NO ENVIADO. open () aún no llamado.
  • 1: Se ha llamado a OPENED open ().
  • 2: HEADERS_RECEIVED send () ha sido llamado y los encabezados y el estado están disponibles.
  • 3: CARGANDO Descargando; responseText contiene datos parciales.
  • 4: DONE La operación está completa.

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

Khurshid Ansari
fuente