XMLHttpRequest의 다른 readystates는 무엇을 의미하며 어떻게 사용할 수 있습니까?


답변:


172

전체 readyState값 목록 은 다음과 같습니다.

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

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

실제로 4를 제외하고는 거의 사용하지 않습니다.

일부 XMLHttpRequest 구현에서는 responseTextwhen 에서 부분적으로 수신 된 응답을 볼 수 readyState==3있지만 이것은 보편적으로 지원되지 않으며 의존해서는 안됩니다.


5
전송 오류는 여전히 readyState를 4로 업데이트합니다. 그러나 완전히 중단 된 전송은 readyState를 0으로 재설정합니다. 따라서 리디렉션의 결과 인 전송 오류는 실제로 "오류"가 아니며 로깅을 무시하도록 선택할 수 있습니다. / xhr의 readyState가 0 인 경우 오류보고. 약간 취약하며 모든 이벤트 / 오류를 로깅하는 것이 "필수"인지 또는 "있어서 좋은지"에 따라 마일리지가 달라질 수 있습니다. 후자의 경우 readyState 0과 함께 오류 일 수있는 드문 이벤트를 잃어 버릴 수 있습니다.
— Greg Pettit 2013 년

2
그의 조언을 위해 @MattBianco에 +1하십시오. 또한 Mozilla 개발자 네트워크 MDN 은 모든 JavaScript / HTML / CSS 요구 사항을 충족하는 가장 인기 있고 신뢰할 수있는 참조 사이트 중 하나라고 덧붙이고 싶습니다 . Google 검색을 수행 할 때 "mdn"을 쿼리 앞에 추가하면 두통을 덜 수 있습니다.
— DondeEstaMiCulo

@GregPettit, 우리가 인터넷에 연결, readyState가 0을 사용, 또는 "요청이 초기화되지 않습니다"어떻게이 존재하는 이유가 있습니다
— 이씨 샤르마

4
잘 모르겠습니다, @vishalsharma-제가 기억하는 것처럼 요청이 초기화되지 않는 한 readystate는 0입니다. 그 후 다른 "완료"(성공 또는 오류)는 readystate를 4로 업데이트합니다. 따라서 전송이 시작된 후 인터넷이 끊어지면 0이 아닌 4로 전환됩니다. 전송이 완료되었을 때 인터넷이 없었던 경우 시도했지만 여전히 0이어야합니다. 핸드 셰이크 후에 만 ​​1로 이동합니다.
— Greg Pettit

readyState 2에 대한 설명이 잘못되었거나 적어도 완전히 오해의 소지가 있습니다. Shure는 요청을 보냈지 만 해당 상태는 실제로 모든 최종 응답 헤더가 수신되었다고 말합니다.
— inta

32

kieron 의 답변에는 w3schools ref가 포함되어 있습니다. 아무도 의지하지 않는, bobince 의 대답은 실제로 IE의 기본 구현을 알려주는 링크를 제공합니다.

그래서 여기에 readystate가 무엇을 나타내는 지 올바르게 이해하기 위해 인용 된 원본 문서가 있습니다.

XMLHttpRequest 객체는 여러 상태에있을 수 있습니다. readyState 속성은 현재 상태를 반환해야하며 다음 값 중 하나 여야합니다.

UNSENT (숫자 값 0)
개체가 생성되었습니다.

OPENED (숫자 값 1)
open () 메서드가 성공적으로 호출되었습니다. 이 상태에서 요청 헤더는 setRequestHeader ()를 사용하여 설정할 수 있으며 요청은 send () 메서드를 사용하여 만들 수 있습니다.

HEADERS_RECEIVED (숫자 값 2)
모든 리디렉션 (있는 경우)을 따르고 최종 응답의 모든 HTTP 헤더를 수신했습니다. 이제 개체의 여러 응답 멤버를 사용할 수 있습니다.

LOADING (숫자 값 3)
응답 엔티티 본문을 수신 중입니다.

DONE (숫자 값 4)
데이터 전송이 완료되었거나 전송 중에 문제가 발생했습니다 (예 : 무한 리디렉션).

여기에서 읽으십시오 : ReadyState의 W3C 설명


@CharlesWood, 나를위한 도전은 여기에 있었다 stackoverflow markdown 편집기는 w3c에 대한 참조를 받아들이지 않을 것입니다 .. 확인하십시오. 그래서 나는 goo.gl에서 짧은 URL을 넣었습니다. w3c url ...
— Vishal Sharma 2014

허, 방금 샌드 박스 에서 시도해 보았는데 작동하는 것 같았습니다.
— Charles Wood

22

원본 최종 문서

0, 1및 2단지 당신이 지금까지 전화 한 요청을하는 데 필요한 방법 중 얼마나 많은을 추적 할 수 있습니다.

3서버의 응답이 들어 오기 시작했음을 알려줍니다. 그러나 XMLHttpRequest웹 페이지에서 개체를 사용할 때는 해당 정보로 할 수있는 작업이 거의 없습니다 (*). 허용하는 확장 속성에 대한 액세스 권한이 없기 때문입니다. 부분 데이터를 읽으십시오.

readyState 4는 모든 의미를 보유하는 유일한 것입니다.

(* : readyState를 확인하기 위해 생각할 수있는 유일한 용도 3는 서버 끝에서 어떤 형태의 생명체를 신호한다는 것입니다. 따라서 전체 응답을받을 때까지 기다리는 시간을 늘릴 수 있습니다.)


1

onreadystatechange readyState 속성이 변경 될 때마다 자동으로 호출 될 함수 (또는 함수 이름)를 저장합니다. readyState XMLHttpRequest의 상태를 보유합니다. 0에서 4로 변경됩니다.

0 : 요청이 초기화되지 않았습니다.

1 : 서버 연결 설정

2 : 요청 수신

3 : 요청 처리

4 : 요청 완료 및 응답 준비

상태 200 : "OK"

404 페이지를 찾을 수 없습니다


0
  • 0 : UNSENT 클라이언트가 생성되었습니다. open () 아직 호출되지 않았습니다.
  • 1 : OPENED open ()이 호출되었습니다.
  • 2 : HEADERS_RECEIVED send ()가 호출되었으며 헤더 및 상태를 사용할 수 있습니다.
  • 3 : LOADING 다운로드 중; responseText는 부분 데이터를 보유합니다.
  • 4 : DONE 작업이 완료되었습니다.

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.