자바스크립트를 사용해 브라우저가 서버에게 비동기 방식으로 데이터를 요청하고, 서버가 응답한 데이터를 수신하여 웹페이지를 동적으로 갱신하는 프로그래밍 방식을 말한다.
- 즉, Ajax는 브라우제에서 제공하는 Web API인 XMLHttpRequest 객체를 기반으로 동작한다.
- XMLHttpRequest는 HTTP 비동기 통신을 위한 메서드와 프로퍼티를 제공한다.
- 변경할 부분을 갱신하는 데 필요한 데이터만 서버로부터 전송받으므로 불필요한 데이터 통신이 발생하지 않는다.
- 변경할 필요가 없는 부분은 리렌더링 하지 않는다.
- 클라이언트와 서버와의 통신이 비동기 방식으로 동작해 블로킹이 발생하지 않는다.
클라이언트 서버 간의 HTTP 통신을 위한 텍스트 데이터 포맷(문자열)
{
"name": "Lee",
"age": 20,
"hobby": ["tennis", "traveling"]
}
만약 객체를 타입 변환을 이용해 String으로 변환할 경우 객체 내용은 포함되지 않는다.
JavaScript에서 객체를 문자열로 변환하기위해 메서드(message.toString())나 형변환(String(message))을 시도하면,[object Object]
라는 결과를 리턴한다.
JSON.stringify
메서드 : 객체를 JSON으로 변환.const obj = {
name: 'Lee',
age: 20,
alive: true,
hobby: ['traveling', 'tennis'],
};
//객체를 JSON 포맷의 문자열로 변환한다.
const json = JSON.stringify(obj);
console.log(typeof json, json);
// string {"name":"Lee","age" :20,"alive":true,"hobby":["traveling", "tennis"]}
//객체를 JSON 포맷의 문자열로 변환하면서 들여쓰기 한다.
const prettyJson = JSON.stringify(obj, null, 2);
console.log(typeof prettyJson, prettyJson);
/*
string {
"name": "Lee",
"age": 20,
"alive": true,
"hobby": [
"traveling",
"tennis"
]
}
*/
//replacer 함수. 값의 타입이 Number면 필터링되어 반환되지 않는다.
function filter(key, value) {
//undefined: 반환하지 않음
return typeof value === 'number' ? undefined : value;
}
const strFilteredObject = JSON.stringify(obj, filter, 2);
console.log(typeof strFilteredObject, strFilteredObject);
/*
string {
"name": "Lee",
"alive": true,
"hobby": [
"traveling",
"tennis"
]
}
*/
const todos = [
{ id: 1, content: 'HTML', completed: false },
{ id: 2, content: 'CSS', completed: true },
];
//배열을 JSON 포맷의 문자열로 변환한다.
const json2 = JSON.stringify(todos, null, 2);
console.log(typeof json2, json2);
/*
string [
{
"id": 1,
"content": "HTML",
"completed": false
},
{
"id": 2,
"content": "CSS",
"completed": true
}
]
*/
JSON.parse
메서드 : JSON을 객체로 변환.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 {name: "Lee", age: 20, alive: true, hobby: ["traveling", "tennis"]}
//배열이 JSON 포맷의 문자열로 변환되있는 경우 문자열을 배열 객체로 변환
const todos = [
{ id: 1, content: 'HTML', completed: false },
{ id: 2, content: 'CSS', completed: true },
];
//배열을 JSON 포맷의 문자열로 변환한다.
const json2 = JSON.stringify(todos);
//JSON 포맷의 문자열을 배열로 변환한다. 배열의 요소까지 객체로 변환된다.
const parsed2 = JSON.parse(json2);
console.log(typeof parsed2, parsed2);
/*
object [
{ id: 1, content: 'HTML', completed: false },
{ id: 2, content: 'CSS', completed: true }
]
*/
- JSON은 서로 다른 프로그램 사이에서 데이터를 교환하기 위한 포맷이다.
- JSON 포맷은 자바스크립트를 포함한 많은 언어에서 범용적으로 사용하는 유명한 포맷이다.
JSON은 얼핏 보기에 자바스크립트의 객체와 별반 다를 바가 없어 보이지만, 자바스크립트의 객체와는 미묘하게 다른 규칙이 있다.