ajax → 비동기 자바스크립트 XML 통신 → fetch() 함수
ajax를 사용하는 이유 → 부분 리로드를 하기 위해
json → javascript object notation


1. 통신 방법
구) 비동기 통신을 하는 방법 then()
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<h1>fetch get</h1>
<hr />
<button onclick="download()">다운로드</button>
<script>
function download() {
let response = fetch(
"https://jsonplaceholder.typicode.com/todos/1",
{
method: "get",
}
);
response
.then((res) => res.json())
.then((res) => {
console.log(res);
});
}
</script>
</body>
</html>
신) 비동기 통신 방법 await()
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<h1>fetch get</h1>
<hr />
<button onclick="download()">다운로드</button>
<script>
// async -> 비동기 함수라고 알려주는 것
async function download2() {
let response = await fetch(
// await -> 되돌아올 체크포인트
"https://jsonplaceholder.typicode.com/todos/1",
{
method: "get",
}
);
// console.log(response);
let responseBody = await response.json();
console.log(responseBody);
}
</script>
</body>
</html>
비동기 통신 후 데이터를 화면에 뿌리는 법
코드
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
div {
border: 1px solid black;
padding: 10px;
}
</style>
</head>
<body>
<div>
<div id="userId"></div>
<div id="id"></div>
<div id="title"></div>
<div id="body"></div>
</div>
<script>
async function getPost() {
let response = await fetch(
"https://jsonplaceholder.typicode.com/posts/1"
);
let responseBody = await response.json(); //js Object
// console.log(responseBody.userId);
// console.log(responseBody.id);
// console.log(responseBody.title);
// console.log(responseBody.body);
document.querySelector("#userId").innerHTML =
responseBody.userId;
document.querySelector("#id").innerHTML = responseBody.id;
document.querySelector("#title").innerHTML = responseBody.title;
document.querySelector("#body").innerHTML = responseBody.body;
}
getPost();
</script>
</body>
</html>


2. 비동기 통신을 해야 하는 이유
코드
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div {
border: 1px solid black;
padding: 10px;
margin-bottom: 5px;
}
.red {
background-color: red;
}
.orange {
background-color: orange;
}
.yellow {
background-color: yellow;
}
.green {
background-color: green;
}
</style>
</head>
<body>
<div id="outer-box">
</div>
<script>
let site = document.querySelector("#outer-box");
makeRedBox();
makeOrangeBox();
makeWhiteBox2();
makeYellowBox();
makeGreenBox();
function makeRedBox() {
let divDom = document.createElement("div");
divDom.setAttribute("class", "red");
site.append(divDom);
}
function makeOrangeBox() {
let divDom = document.createElement("div");
divDom.setAttribute("class", "orange");
site.append(divDom);
}
function makeYellowBox() {
let divDom = document.createElement("div");
divDom.setAttribute("class", "yellow");
site.append(divDom);
}
function makeGreenBox() {
let divDom = document.createElement("div");
divDom.setAttribute("class", "green");
site.append(divDom);
}
function makeWhiteBox() {
let request = new XMLHttpRequest();
request.open('GET', 'http://localhost:8080/api/boards/1', false); // 마지막 인자 false → 동기 요청
request.send(null);
let responseBody = JSON.parse(request.responseText);
let divDom = document.createElement("div");
divDom.innerHTML = responseBody.body.title;
site.append(divDom);
}
async function makeWhiteBox2() {
let response = await fetch("http://localhost:8080/api/boards/1");
let responseBody = await response.json();
let divDom = document.createElement("div");
divDom.innerHTML = responseBody.body.title;
site.append(divDom);
}
</script>
</body>
</html>
Share article