Programming/Javascript

[Javascript] XMLHttpRequest

Bam_t 2021. 10. 17. 22:08
728x90

이 객체를 사용하는 이유나 Ajax 등에 대해선 아래 포스트를 참조해주세요.

2021.10.15 - [Programming/CS] - Ajax

 

Ajax

해외 축구를 많이 보던 저에게 단어 자체는 Ajax라는 단어는 익숙한 단어였습니다. 아약스라는 축구팀이 있기도 하고 그리스 신화에도 아약스라는 인물이 등장하기 때문에 처음 이 단어를 들을

bamtory29.tistory.com


1.XMLHttpRequest

비동기 통신을 관리하는 XMLHttpRequest 객체를 이용하면 자바스크립트로 서버와의 통신을 어느정도 제어할 수 있습니다. 이름에 XML과 HTTP가 들어가긴 하지만 이 두가지만 통신하는 것이 아니고 객체의 프로퍼티들을 통해서 JSON 문자열이나 일반 Text, HTML 문자열까지도 통신할 수 있습니다. 그렇기에 이름에서 오는 것에 대한 오해 없이 통신을 제어하는 객체라고 이해하고 있는 편이 좋습니다.

 

 

2. XMLHttpRequest 객체의 멤버들

우선  XMLHttpRequest 객체의 프로퍼티들 입니다. 몇가지를 소개하고 더 많고 자세한 내용은 참조의 링크를 참조해주세요.

프로퍼티 명 설명
response 응답 본체의 취득
readyState HTTP의 통신 상태 취득
responseText 응답 본체를 일반 text로 취득
responseType 응답의 타입 취득
responseXML 응답 본체를 XML로 취득
status HTTP Status 코드 취득
statusText HTTP Status 상태 메세지를 취득
timeout 요청을 자동으로 종료할 때 까지의 시간
onreadystatechange 통신 상태의 변화시 호출되는 이벤트 핸들러
ontimeout 요청 타임아웃시에 호출되는 이벤트 핸들러

 

이때 readyState 프로퍼티의 HTTP 통신 상태와 State의 상태 코드라는게 있는데, 통신 상태와 코드는는 특정 숫자 값으로 나타냅니다. 응답이나 통신 상태가 특정 숫자 값을 가짐에 따라 통신이 진행 중인지, 성공했는지, 실패했는지 알 수 있습니다. 아마도 우리가 가장 잘아는 통신 상태 코드는 '404 Not Found'의 404번 아닐까 싶습니다.

이 값들에는 여러 코드가 있지만 주로 사용하는/볼 수 있는 코드 몇 가지를 소개하겠습니다.

readyState의 반환 값 설명
0 open 메소드가 호출되지 않은 미초기화 상태
1 open 메소드는 호출되었지만 send가 호출안된 로드 중 상태
2 send 메소드는 호출되었지만, 응답 상태나 헤더가 미취득인
로드 완료 상태
3 응답 상태와 헤더는 취득했지만, 응답 본체가 취득 안된 상태인
일부 응답 상태
4 모든 응답 데이터가 취득이 완료된 상태
status 반환 값 설명
200 OK (= 처리 성공)
401 Unauthorized (= 인증 필요)
403 Forbidden (= 액세스 거부)
404 Not Found (= 요청된 자원이 존재하지 않음)
500 Internal Server Error (= 내부 서버 에러)
503 Service Unavailable (= 요구 서버 이용 불가)

 

다음은 XMLHttpRequest 객체의 메소드들입니다.

메소드 설명
open() HTTP 요청 초기화
send(요청 본체) HTTP 요청 송신
abort() 현재 비동기 통신 중단
getAllResponseHeaders() 수신한 모든 HTTP 응답 헤더 취득
getResponseHeader(header) 지정한 HTTP 응답 헤더 취득

 

 

 

3. XMLHttpRequest 사용 예

XMLHttpRequest 객체는 보통 다음과 같이 이용할 수 있습니다. XMLHttpRequest 객체를 생성하고 그 후에는 필요 기능에 따라 조합해서 이용합니다. 다음 코드는 가장 간단한 통신의 성공 실패 완료 예시입니다.

let xhr = new XMLHttpRequest();	//XMLHttpRequest 객체 생성

        xhr.onreadystatechange = function () {
            if (xhr.readyState === 4) {
              //통신 완료
                if (xhr.status === 200) {
                  //통신 성공
                }
                else {
                  //통신 실패
                }
            }
            else {
              //통신중
            }
        };

참조

https://developer.mozilla.org/ko/docs/Web/API/XMLHttpRequest

 

XMLHttpRequest - Web API | MDN

XMLHttpRequest 는 이름으로만 봐서는 XML 만 받아올 수 있을 것 같아 보이지만, 모든 종류의 데이터를 받아오는데 사용할 수 있습니다. 또한 HTTP 이외의 프로토콜도 지원합니다(file 과 ftp 포함).

developer.mozilla.org

https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest

 

Using XMLHttpRequest - Web APIs | MDN

In this guide, we'll take a look at how to use XMLHttpRequest to issue HTTP requests in order to exchange data between the web site and a server.

developer.mozilla.org

728x90