반응형
요즘 제이쿼리를 안쓰려고 한다.
이유는 단순하다. 오류 찾기가 너무 어렵더라. 그리고 제이쿼리 자체가 너무 오래된 라이브러리기도 하고
자바스크립트를 공부하려면 제이쿼리 안쓰는게 좋을거 같아서...
근데 다른것들은 다 괜찮은데 Ajax 요청을 바닐라js로 작성하는게 문제였다.
const xhr = new XMLHttpRequest();
const method = "GET";
const url = "https://어쩌구저쩌구URL";
xhr.open(method, url);
// onreadystatechange 이벤트를 이용해 요청에 대한 응답 결과를 처리
// XMLHttpRequest의 상태가 변하면 얘가 감지한다.
xhr.onreadystatechange = function (event) {
const { target } = event;
if (target.readyState === XMLHttpRequest.DONE) {
const { status } = target;
if (status === 0 || (status >= 200 && status < 400)) {
// 요청이 정상적으로 처리 된 경우
} else {
// 에러가 발생한 경우
}
}
};
// 서버에 요청을 보내기
xhr.send();
매번 http 요청을 보낼때 이렇게 써야한다고 하면 그냥 $ajax쓰는게 훨씬 낫다.
다행히 바닐라js에는 Fetch API라는 좋은 대안이 있었다.
GET요청
fetch('https://어쩌구URL') //이렇게 따로 옵션을 안주면 GET요청이다
.then((res) => res.json()) //JSON 데이터를 받으면 json()으로 파싱, text면 text() 사용
.then((data) => console.log(data));
.error((error) => console.error(error));
POST 요청
let reqData = {name: 'John'};
fetch('https://어쩌구URL', {
method: 'POST',
body: reqData,
})
.then((res) => res.json())
.then((resData) => {
console.log(resData);
})
.error((error) => console.error(error));
훨씬 간단하고 사용하기도 편하다.
fetch API는 자바스크립트 내에 내장된 api인데 http 요청을 보낸 후 Promise 객체를 반환한다.
물론 저렇게만 쓴다면 우리가 Promise객체를 컨트롤할 필요도 없고 바로 데이터를 받아와서 매우 편하다.
저 .then()이라는 메서드가 $ajax의 success 처럼 다음 실행할 콜백함수를 동기적으로 실행시켜준다.
(http 요청을 동기처리해준다는게 아니라 응답이 온 이후 실행할 콜백함수를 동기처리해준다는 뜻이다.)
더 자세히 이해하고 싶다면 Promise객체에 관해서 공부하는것을 추천
반응형
'개발 > Javascript' 카테고리의 다른 글
자바스크립트 addEventListener 중복 방지 (0) | 2022.08.26 |
---|---|
자바스크립트 Map 사용하기 (0) | 2022.08.25 |
요소의 크기 변화를 감지하는 ResizeObserver (0) | 2022.08.22 |
자바스크립트의 프로토타입 (Javascript prototype) (0) | 2022.08.17 |
비동기 요청 여러 개 보내고 전부 완료됐을 때 함수 실행하기 (Promise.allSettled) (0) | 2022.08.09 |