Cosa significano i diversi stati pronti in XMLHttpRequest e come posso utilizzarli?


Risposte:


172

L'elenco completo dei readyStatevalori è:

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

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

In pratica non ne usi quasi mai nessuno tranne 4.

Alcune implementazioni XMLHttpRequest possono consentire di visualizzare le risposte parzialmente ricevute in responseTextquando readyState==3, ma questo non è universalmente supportato e non dovrebbe essere invocato.


5
Gli errori nel trasferimento aggiornano ancora readyState a 4. Tuttavia, un trasferimento completamente interrotto reimposterà readyState a 0. Quindi, un errore nel trasferimento che è il risultato di un reindirizzamento non è veramente un "errore" e puoi scegliere di ignorare la registrazione / segnalare l'errore se readyState di xhr è 0. È un po 'fragile e il tuo chilometraggio può variare a seconda che la registrazione di ogni evento / errore sia un "must have" o un "nice to have". Se è quest'ultimo, puoi permetterti di perdere il raro evento che potrebbe essere un errore insieme a readyState di 0.
Greg Pettit

2
+1 a @MattBianco per i suoi consigli. Vorrei anche aggiungere che Mozilla Developer Network MDN è senza dubbio uno dei siti di riferimento più popolari e affidabili là fuori per tutte le tue esigenze JavaScript / HTML / CSS. Quando esegui una ricerca su Google, aggiungi "mdn" all'inizio della query e ti risparmierai qualche grattacapo.
DondeEstaMiCulo

@GregPettit, possiamo usare readystate 0, per nessuna connessione Internet, o ci sono ragioni per cui "La richiesta non è inizializzata"
Vishal Sharma

4
Non sono sicuro, @vishalsharma - se ricordo bene, readystate è 0 fintanto che la richiesta non è inizializzata. Dopodiché, qualsiasi altro "completamento" (per successo o errore) aggiornerà lo stato pronto a 4. Quindi la perdita di Internet dopo l'inizio del trasferimento lo riporterà a 4, non a 0. Se non c'è mai stato Internet quando il trasferimento è tentato, dovrebbe essere ancora a 0; passerà a 1 solo dopo la stretta di mano.
Greg Pettit

La spiegazione di readyState 2 è sbagliata, o almeno completamente fuorviante. Shure la richiesta è stata inviata, ma quello stato in realtà dice che tutte le intestazioni di risposta finali sono state ricevute.
inta

32

Kieron risposta s' contiene w3schools rif. a cui nessuno fa affidamento, la risposta di bobince fornisce il collegamento, che in realtà indica l'implementazione nativa di IE,

quindi ecco la documentazione originale citata per capire giustamente cosa rappresenta readystate:

L'oggetto XMLHttpRequest può trovarsi in diversi stati. L'attributo readyState deve restituire lo stato corrente, che deve essere uno dei seguenti valori:

UNSENT (valore numerico 0)
L'oggetto è stato costruito.

OPENED (valore numerico 1)
Il metodo open () è stato invocato con successo. Durante questo stato le intestazioni della richiesta possono essere impostate utilizzando setRequestHeader () e la richiesta può essere effettuata utilizzando il metodo send ().

HEADERS_RECEIVED (valore numerico 2)
Tutti i reindirizzamenti (se presenti) sono stati seguiti e tutte le intestazioni HTTP della risposta finale sono state ricevute. Sono ora disponibili diversi membri di risposta dell'oggetto.

LOADING (valore numerico 3)
È stato ricevuto il corpo dell'entità di risposta.

FATTO (valore numerico 4)
Il trasferimento dei dati è stato completato o qualcosa è andato storto durante il trasferimento (es. Reindirizzamenti infiniti).

Si prega di leggere qui: W3C Explaination Of ReadyState


@CharlesWood, la sfida per me era qui l'editor di markdown di stackoverflow non accetterà fare riferimento a w3c .. controlla quindi ho inserito un URL breve da goo.gl .... non capisco perché non mi permette di metterlo direttamente URL w3c ...
Vishal Sharma

Huh, l'ho appena provato nella sandbox e sembrava funzionare.
Charles Wood,

22

Documentazione definitiva originale

0, 1E 2solo monitorare il numero dei metodi necessari per compilare il modulo che avete chiamato finora.

3ti dice che la risposta del server ha iniziato ad arrivare. Ma quando stai usando l' XMLHttpRequestoggetto da una pagina web non c'è quasi nulla (*) che puoi fare con quelle informazioni, dato che non hai accesso alle proprietà estese che consentono leggere i dati parziali.

readyState 4è l'unico che ha un significato.

(*: L'unico utilizzo concepibile a cui posso pensare per verificare readyState 3è che segnala una qualche forma di vita alla fine del server, quindi potresti aumentare il tempo di attesa per una risposta completa quando la ricevi.)


1

onreadystatechange Memorizza una funzione (o il nome di una funzione) da chiamare automaticamente ogni volta che la proprietà readyState cambia readyState Mantiene lo stato di XMLHttpRequest. Modifiche da 0 a 4:

0: richiesta non inizializzata

1: connessione al server stabilita

2: richiesta ricevuta

3: richiesta di elaborazione

4: richiesta terminata e risposta pronta

stato 200: "OK"

404 pagina non trovata


0
  • 0: UNSENT Client è stato creato. open () non ancora chiamato.
  • 1: OPENED open () è stato chiamato.
  • 2: HEADERS_RECEIVED send () è stato chiamato e sono disponibili le intestazioni e lo stato.
  • 3: LOADING Download in corso; responseText contiene dati parziali.
  • 4: FATTO L'operazione è completa.

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.