{
"name": "Lee",
"age": 20,
"alive": true,
"hobby": ["traveling", "tennis"]
}
const obj = {
"name": "Lee",
"age": 20,
"alive": true,
"hobby": ["traveling", "tennis"]
};
// 객체를 JSON 포맷의 문자열로 변환
const json = JSON.stringify(obj);
console.log(typeof json, json); // string
// 객체를 JSON 포캣의 문자열로 변환하면서 들여쓰기 함
const prettyJson = JSON.stringify(obj, null, 2);
console.log(typeof prettyJson, prettyJson);
const obj = {
"name": "Lee",
"age": 20,
"alive": true,
"hobby": ["traveling", "tennis"]
};
// 객체를 JSON 포맷의 문자열로 변환
const json = JSON.stringify(obj);
// JSON 포맷의 문자열을 객체로 변환
const parsed = JSON.parse(json);
console.log(typeof parsed, parsed); // object
const xhr = new XMLHttpRequest();
XMLHttpRequest 객체의 이벤트 핸들러 프로퍼티
XMLHttpRequest 객체의 메서드
XMLHttpRequest 객체의 정적 프로퍼티
// XMLHttpRequest 객체 생성
const xhr = new XMLHttpRequest();
// HTTP 요청 초기화
xhr.open('GET', '/users');
// HTTP 요청 헤더 설정
// 클라이언트 -> 서버 전송 데이터의 MIME 타입 지정 : json
xhr.setRequestHeader('content-type', 'application/json');
// HTTP 요청 전송
xhr.send();
XMLHttpRequest.prototype.open
xhr.open(method, url[, async])
XMLHttpRequest.prototype.send
xhr.send(JSON.stringify({id: 1, content: 'HTML', completed: false}));
XMLHttpRequest.prototype.setRequestHeader
setRequestHeader 메서드는 특정 HTTP 요청의 헤더 값을 설정한다. 반드시 open 메서드를 호출한 이후에 호출해야 한다.
Content-type은 요청 몸체에 담아 전송할 데이터의 MIME 타입의 정보를 표현한다.
자주 사용되는 MIME 타입
HTTP 클라이언트가 서버에 요청할때 서버가 응답할 데이터의 MIME 타입을 Accept로 지정할 수 있다. 만약 Accept 헤더를 설정하지 않으면 sen 메서드가 호출 될 때 Accept 헤더가 /으로 전송된다.
// 서버가 응답할 데이터의 MIME 타입 지정 : json
xhr.setRequestHeader('accept', 'application/json');
const xhr = new XMLHttpRequest();
xhr.open('GET', 'https:jsonplaceholder.typicode.com/todos/1');
xhr.send();
// readystatechange 이벤트는 HTTP 요청의 현재 상태를 나타내는 readyState 프로퍼티가 변경될 때마다 발생한다.
xhr.onreadystatechange = () => {
// readyState 프로퍼티는 HTTP 요청의 현재 상태를 나타낸다.
// readyState 프로퍼티 값이 4(XMLHttpRequest.DONE)가 아니면 서버 응답이 완료되지 않은 상태다.
// 만약 서버 응답이 아직 완료되지 않았다면 아무런 처리를 하지 않는다.
if(xhr.readyState !== XMLHttpRequest.DONE) return;
// status 프로퍼티는 응답 상태 코드를 타나낸다.
// status 프로퍼티 값이 200이면 정상적으로 응답된 상태이고
// status 프로퍼티 값이 200이 아니면 에러가 발생한 상태다.
// 정상적으로 응답된 상태라면 response 프로퍼티에 서버의 응답 결과가 담겨 있다.
if(xhr.status === 200) {
console.log(JSON.parse(xhr.response));
} else {
console.error('Error', xhr.status, xhr.statusText);
}
}
// load의 경우
xhr.onload = () => {
if(xhr.status === 200) {
console.log(JSON.parse(xhr.response));
} else {
console.error('Error', xhr.status, xhr.statusText);
}
}