비동기 자바스크립트와 XML(Asynchronous JavaScript And XML)을 말한다.
서버와 통신하기 위해 XMLHttpRequest
객체를 사용하는 것을 말한다.
AJAX를 이용하면 페이지 전체를 Refresh 하지 않고 원하는 부분만 변경이 되게 할 수 있다.
예를 들면 위와 같이 댓글을 입력하는 상황에서 페이지 이동 없이 작성한 댓글을 확인할 수 있게된다.
<html>
<head>
</head>
<body>
<div id="content"></div>
<button id="ajax">AJAX</button>
</body>
</html>
const ajax = document.querySelector("#ajax")
const content = document.querySelector("#content")
const xhr = new XMLHttpRequest()
xhr.open("get", "http://localhost:3000", true)
send()
함수에서 서버로부터 응답이 올 때까지 기다림)MIME 타입 지정이란 전송된 문서의 타입을 알려주기 위해 지정해주는 걸 의미한다.
브라우저들은 리소스를 내려받았을 때 해야 할 기본 동작이 무엇인지 결정하기 위해 사용한다.
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
xhr.send()
실제로 서버로 요청을 보내는 코드이다.
send 메서드의 인자로 데이터를 넣으면 HTTP Request Body에 담겨져서 요청이 보내진다.
언제 응답이 올지 모르기 때문에 이벤트로 처리를 해준다.
xhr.onload = () => {
if (xhr.readyState === 4 && xhr.status === 200) {
console.log(xhr.response)
} else {
console.log("무언가 오류가 발생했어요!")
}
Node.js Express 기준
const express = require("express");
const app = express();
app.use(express.urlencoded({ extended: false }));
app.use(express.json());
app.get("/", (req, res) => {
res.status(200).send("data")
})
app.listen(3000, () => {
console.log(`Server Start`);
});
서버에서는 해당 라우터로 들어오는 요청에 응답을 주면 된다.
Express에서 req.body로 데이터를 읽으려면 다음 미들웨어를 장착해야 한다.
app.use(express.urlencoded({extended: false}))
JSON으로 req.body에 JSON 형식으로 데이터가 들어올 때는 다음 미들웨어를 장착하면 된다.
app.use(express.json())
클라이언트는 요청을 할 때 타입에 맞는 컨텐츠 타입을 설정해서 요청을 보내고 서버는 요청에 맞는 응답을 주면 된다.
https://developer.mozilla.org/ko/docs/Web/Guide/AJAX/Getting_Started
https://namu.wiki/w/AJAX
https://developer.mozilla.org/ko/docs/Web/HTTP/Basics_of_HTTP/MIME_types
https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/load_event
https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState