O que significam os diferentes readystates em XMLHttpRequest e como posso usá-los?


Respostas:


172

A lista completa de readyStatevalores é:

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 )

Na prática, você quase nunca usa nenhum deles, exceto 4.

Algumas implementações de XMLHttpRequest podem permitir que você veja respostas parcialmente recebidas em responseTextquando readyState==3, mas isso não é universalmente suportado e não deve ser invocado.


5
Erros na transferência ainda atualizam o readyState para 4. No entanto, uma transferência completamente interrompida irá redefinir o readyState para 0. Portanto, um erro na transferência que é resultado de um redirecionamento não é realmente um "erro" e você pode escolher ignorar o registro / reportando o erro se o readyState do xhr for 0. É um pouco frágil e sua milhagem pode variar dependendo se o registro de cada evento / erro é um "obrigatório" ou um "bom ter". Se for o último, você pode perder o evento raro que pode ser um erro junto com o estado pronto de 0.
— Greg Pettit

2
+1 para @MattBianco por seus conselhos. Também gostaria de acrescentar que o Mozilla Developer Network MDN é indiscutivelmente um dos sites de referência mais populares e confiáveis ​​para todas as suas necessidades de JavaScript / HTML / CSS. Ao fazer uma pesquisa no Google, inclua "mdn" antes de sua consulta e você evitará algumas dores de cabeça.
— DondeEstaMiCulo

@GregPettit, podemos usar readystate 0, para nenhuma conexão com a Internet, ou há algum motivo em que "A solicitação não foi inicializada"
— Vishal Sharma

4
Não tenho certeza, @vishalsharma - pelo que me lembro, o readystate é 0, desde que a solicitação não seja inicializada. Depois disso, qualquer outra "conclusão" (por sucesso ou erro) atualizará o readystate para 4. Portanto, perder a internet após o início da transferência o mudará para 4, e não para 0. Se nunca houve internet quando a transferência foi tentada, ainda deve estar em 0; ele só mudará para 1 após o handshake.
— Greg Pettit,

A explicação para readyState 2 está errada - ou pelo menos completamente enganosa. Claro que a solicitação foi enviada, mas esse estado na verdade diz que todos os cabeçalhos de resposta final foram recebidos.
— inta

32

kieron 's resposta contém w3schools ref. no qual ninguém confia, a resposta de bobince fornece um link, que na verdade informa a implementação nativa do IE,

então aqui está a documentação original citada para entender corretamente o que readystate representa:

O objeto XMLHttpRequest pode estar em vários estados. O atributo readyState deve retornar o estado atual, que deve ser um dos seguintes valores:

UNSENT (valor numérico 0)
O objeto foi construído.

OPENED (valor numérico 1)
O método open () foi chamado com sucesso. Durante esse estado, os cabeçalhos de solicitação podem ser definidos usando setRequestHeader () e a solicitação pode ser feita usando o método send ().

HEADERS_RECEIVED (valor numérico 2)
Todos os redirecionamentos (se houver) foram seguidos e todos os cabeçalhos HTTP da resposta final foram recebidos. Vários membros de resposta do objeto agora estão disponíveis.

LOADING (valor numérico 3)
O corpo da entidade de resposta está sendo recebido.

DONE (valor numérico 4)
A transferência de dados foi concluída ou algo deu errado durante a transferência (por exemplo, redirecionamentos infinitos).

Leia aqui: Explicação W3C de ReadyState


@CharlesWood, o desafio para mim foi aqui o editor de markdown stackoverflow não aceita consultar w3c .. confira, portanto, coloquei um url curto de goo.gl ... não entendo por que não me permite colocar diretamente url w3c ...
— Vishal Sharma

Huh, eu apenas tentei isso na caixa de areia e pareceu funcionar.
— Charles Wood

22

Documentação definitiva original

0, 1E 2única acompanhar como muitos dos métodos necessários para fazer um pedido que você chamou até agora.

3informa que a resposta do servidor começou a chegar. Mas quando você está usando o XMLHttpRequestobjeto de uma página da web, não há quase nada (*) que você possa fazer com essa informação, já que você não tem acesso às propriedades estendidas que permitem você a ler os dados parciais.

readyState 4é o único que possui algum significado.

(*: quase o único uso concebível que posso pensar para verificar o readyState 3é que ele sinaliza alguma forma de vida no final do servidor, então você pode aumentar o tempo de espera por uma resposta completa quando a receber.)


1

onreadystatechange Armazena uma função (ou o nome de uma função) a ser chamada automaticamente sempre que a propriedade readyState muda. readyState Contém o status do XMLHttpRequest. Mudanças de 0 a 4:

0: solicitação não inicializada

1: conexão do servidor estabelecida

2: pedido recebido

3: solicitação de processamento

4: pedido concluído e resposta pronta

status 200: "OK"

404 Página Não Encontrada


0
  • 0: Cliente NÃO ENVIADO criado. open () ainda não chamado.
  • 1: OPENED open () foi chamado.
  • 2: HEADERS_RECEIVED send () foi chamado, e cabeçalhos e status estão disponíveis.
  • 3: CARREGANDO Baixando; responseText contém dados parciais.
  • 4: DONE A operação está concluída.

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.