: 유저가 데이터 달라고 요청을 하면 데이터를 보내주는 간단한 프로그램
GET 요청: 서버에 있던 데이터 읽기
- 브라우저 주소창에 url 적으면 그 곳으로 GET요청을 날린다.
POST요청: 서버로 데이터 보내기
- <form action="요청할url" method="post">
태그로
폼이 전송되었을 때 POST요청을 날린다.
(Asynchronous JavaScript And XML = 비동기 자바스크립트와 XML)
: 서버에 GET, POST 요청을 할 때 새로고침 없이 데이터를 주고받을 수 있게 도와주는 기능
fetch()
함수fetch(url, options(옵션 객체))
.then((response) => console.log("response:", response))
.catch((error) => console.log("error:", error));
---------------------------------------------------------
fetch('api 주소')
.then(res => res.json())
.then(res => {
// data를 응답 받은 후의 로직
});
---------------------------------------------------------
fetch('api 주소')
.then(function(res) {
return res.json();
})
.then(function(res) {
// data를 응답 받은 후의 로직
});
fetch('https://codingapple1.github.io/hello.txt')
.then(res => res.json()) // 받아온 JSON -> obejct로 바꿔주는 기능
.then(data => {
console.log(data)
})
.catch(error =>{
console.log(error)
})
XMLHttpRequest()
를 실행하여 통신에 사용될 XMLHttpRequest(XHR) 객체를 생성한다..open()
으로 생성된 객체에 요청을 초기화한다.open('전송 방식', 'url', '비동기 여부')
.send()
로 요청을 전송한다..onload
로 통신 후 콜백(Callback) 처리한다..status
는 XHR객체의 응답 상태를 반환한다. (통신 성공 시 200 반환).response
를 사용하면 서버에서 전송한 데이터를 사용할 수 있다.var btn = document.getElementById("btn-ajax");
btn.addEventListener("click", () => {
// 1. XMLHttpRequest 객체 생성
var xhr = new XMLHttpRequest();
// 2. 생성된 객체에 요청을 초기화
xhr.open('GET', 'url', true);
// 3. 요청 전송
xhr.send();
// 4. 통신 후 콜백(Callback) 처리
xhr.onload = () => {
// XHR객체의 응답 상태를 반환
if (xhr.status == 200) {
// 성공
console.log(xhr.response);
// 서버에서 전송한 데이터를 사용 가능
} else {
// 실패
}
}
});
XMLHttpRequest()
를 실행하여 통신에 사용될 XMLHttpRequest(XHR) 객체를 생성한다..open()
으로 생성된 객체에 요청을 초기화한다.open('전송 방식', 'url', '비동기 여부
3. .setRequestHeader()
를 통해 헤더 설정을 추가한다.
4. 전송할 데이터를 .send()
안에 넣어 요청을 전송한다.
5. .onload
로 통신 후 콜백(Callback) 처리한다.
6. .status
는 XHR객체의 응답 상태를 반환한다. (통신 성공 시 200 반환)
7. .response
를 사용하면 서버에서 전송한 데이터를 사용할 수 있다.
var btn = document.getElementById("btn-ajax");
btn.addEventListener("click", () => {
// 1. XMLHttpRequest 객체 생성
var xhr = new XMLHttpRequest();
// 2. 생성된 객체에 요청을 초기화
xhr.open('POST', 'url', true);
// 3. HTTP 요청 헤더 설정
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
// 4. 요청 전송
xhr.send("id=post_ajax");
// 5. 통신 후 콜백(Callback) 처리
xhr.onload = () => {
// XHR객체의 응답 상태를 반환
if (xhr.status == 200) {
// 성공
console.log(xhr.response);
// 서버에서 전송한 데이터를 사용 가능
} else {
// 실패
}
}
});
document.getElementById('more').addEventListener('click', function() {
// 1. 데이터 가져오기
fetch('https://codingapple1.github.io/js/more1.json')
.then(res => res.json())
.then(data => {
console.log(data)
// 2. 데이터만큼 카드 더 만들기
data.forEach((a, i) => {
var a =
`<div class="col-sm-4">
<img src="https://via.placeholder.com/600" class="w-100">
<h5>${data[i].title}</h5>
<p>가격 : ${data[i].price}</p>
</div>`;
document.querySelector('.row').insertAdjacentHTML('beforeend', a);
})
})
.catch(error =>{
console.log(error)
})
})
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<!-- Bootstrap CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css"
rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous"/>
</head>
<body>
<div class="container">
<div class="row">
</div>
</div>
<div class="container">
<button class="btn btn-danger" id="more">더보기</button>
</div>
<script src="index.js"></script>
</body>
</html>
index.js
var products = [
{ id : 0, price : 80000, title : 'Blossom Dress' },
{ id : 1, price : 50000, title : 'Spring Shirt' },
{ id : 2, price : 60000, title : 'Black pants' }
];
// 데이터만큼 상품 목록 만들기 (js로 html 생성하기)
// 1. 카드 레이아웃 3개 생성
// 2. 카드에 데이터 넣기
products.forEach((a, i) => {
var a =
`<div class="col-sm-4">
<img src="https://via.placeholder.com/600" class="w-100">
<h5>${products[i].title}</h5>
<p>가격 : ${products[i].price}</p>
</div>`;
// <h5>${a.title}</h5>
// <p>가격 : ${a.price}</p>
document.querySelector('.row').insertAdjacentHTML('beforeend', a);
});
// 상품 더보기 버튼
// 1. 데이터 가져오기
// 2. 데이터만큼 카드 더 만들기
document.getElementById('more').addEventListener('click', function() {
// 1. 데이터 가져오기
fetch('https://codingapple1.github.io/js/more1.json')
.then(res => res.json())
.then(data => {
console.log(data)
// 2. 데이터만큼 카드 더 만들기
data.forEach((a, i) => {
var a =
`<div class="col-sm-4">
<img src="https://via.placeholder.com/600" class="w-100">
<h5>${data[i].title}</h5>
<p>가격 : ${data[i].price}</p>
</div>`;
document.querySelector('.row').insertAdjacentHTML('beforeend', a);
})
})
.catch(error =>{
console.log(error)
})
})
출처
코딩애플
https://cocobi.tistory.com/121
https://www.daleseo.com/js-window-fetch/
https://yeri-kim.github.io/posts/fetch/