XMLHttpRequest 객체 기반으로 동작XMLHttpRequest : HTTP 비동기 통신을 위한 메서드와 프로퍼티 제공JSON.stringify : 객체를 JSON 포맷의 문자열로 변환JSON.parse : JSON 포맷의 문자열을 객체로 변환XMLHttpRequest 객체 기반으로 동작XMLHttpRequest : HTTP 비동기 통신을 위한 메서드와 프로퍼티 제공XMLHttpRequest : 생성자 함수 호출하여 생성readyState : 요청의 현재 상태를 나타내는 정수status : 요청에 대한 응답 상태를 나타내는 정수 (200, 400, 500 등)statusText : 요청에 대한 응답 메시지를 나타내는 문자열responseType : 응답 타입 (document, json 등)response : 요청에 대한 응답 몸체 (response body)responseType에 따라 다른 타입responseText : 서버가 전송한 요청에 대한 응답 문자열onreadystatechange : readyState 프로퍼티 값이 변경된 경우onerror : 요청에 에러가 발생한 경우onload : 요청을 성공적으로 완료한 경우onloadstart, onprogress, onabort 등open : 요청 초기화send : 요청 전송abort : 전송된 요청 중단setRequestHeader : 특정 요청 헤더 값 설정getRequestHeader : 특정 요청 헤더 값 문자열 반환UNSENT, OPENED, HEADERS_RECEIVED, LOADINGDONE : 서버 응답 완료XMLHttpRequest.prototype.open 메서드로 HTTP 요청 초기화XMLHttpRequest.prototype.setRequestHeader 메서드로 헤더 값 설정XMLHttpRequest.prototype.send 메서드로 HTTP 요청 전송 xhr.open(method, url[, async])method : HTTP 요청 메서드("GET", "POST" 등)url : HTTP 요청 전송할 URLasync : 비동기 요청 여부, 기본 값 true = 비동기 방식-open 메서드로 초기화된 HTTP 요청을 서버에 전송
JSON.stringify로 직렬화하여 전달해야 함open 메서드 호출 이후에 호출해야 함Content-type : 전송할 데이터의 MIME 타입 정보 표현xhr.setRequestHeader('content-type', 'application/json');Accept : 서버로부터 응답받을 데이터의 MIME 타입 지정*/* 로 전송됨xhr.setRequestHeader('accept-type', 'application/json');
readyState 프로퍼티와 readystatechange 이벤트 사용하여 HTTP 응답 처리readystatechange 메서드를 통해 HTTP 요청의 현재 상태 확인onload 로도 사용 가능readyState)가 변경될 때마다 이벤트 발생 // 1. XMLHttpRequest 객체 생성
const xhr = new XMLHttpRequest();
// 2. HTTP 요청 초기화
xhr.open('GET', 'https://...');
// 3. HTTP 요청 전송
xhr.send();
// 4. readyState 프로퍼티 변경될 때마다 이벤트 발생
xhr.onreadystatechange = () => {
// 서버 응답이 완료되지 않은 경우 리턴
if (xhr.readyState !== XMLHttpRequest.DONE) return;
if (xhr.status === 200) {
// 서버 응답이 정상적으로 완료된 상태
console.log(JSON.parse(xhr.response));
} else {
// 서버 응답이 에러가 발생한 상태
console.log('Error', xhr.status, xhr.statusText);
}
};
[출처] 모던 자바스크립트, Deep Dive