[Javascript] ajax 사용하기: fetch 함수

[원본 링크]

예전에는 ajax 통신을 수행하려면 XML 어쩌고 하는 타입을 가져다가 복잡한 비동기 핸들링을 시도하거나, 제이쿼리 등의 간편화된 라이브러리를 사용해야 했었다.

하지만 ES6부터는 ajax에 대한 간편화된 기능이 곧바로 지원된다!
바로 fetch라는 함수인데.
꽤 근래에 나온 버전이므로, IE 등에서는 돌아가지 못할 수도 있다는 게 단점이다.
하위호환성을 고려해야 한다면 babel을 통한 트랜스파일링이 요구될 것이다.

fetch 함수는 첫번째 인자로 통신을 시도할 URL, 두번째 인자로 추가 데이터들의 오브젝트를 받는다.
그리고 핸들링을 담당할 Promise를 반환한다. 이 Promise 반환의 then 메서드에다 핸들러를 정의하면 된다.

코드를 보자. 테스트환경은 Express.js인데, 이건 그리 중요한건 아니고
일단 ajax를 시도할 뷰는 이렇다.
/ajax라는 페이지에 전송을 시도해서 텍스트를 하나 받고, alert로 띄울 것이다.

fetch의 Promise then 핸들러는 하나의 Response 객체를 인자로 받는데,
골때리는건 저것도 Promise라서 데이터를 꺼내려면 또 then을 걸어줘야 한다는 것이다.

그리고 서버 측의 ajax 처리 코드다. "안녕"이라는 텍스트만 하나 쏴준다.

한번 돌려보자

저기서 누르면


잘 가져온다.

이외에도 method 선택, body로 보낼 인자 등 기타 설정들은 fetch의 2번째 인자로 오브젝트를 넘겨주는 것으로 수행할 수 있다.
이번엔 텍스트를 body로 넣고 보내서, ajax 처리 서버에서는 그걸 다시 반송하고, 그걸 다시 받아서 alert를 하도록 했다.

서버측 코드다. 그냥 받고 그대로 돌려주기만 한다.

그럼 이렇게 잘 작동한다.

더 자세하고 유익한 정보를 원한다면, 문서를 참고하자.
https://developer.mozilla.org/ko/docs/Web/API/Fetch_API/Fetch%EC%9D%98_%EC%82%AC%EC%9A%A9%EB%B2%95

https://developer.mozilla.org/ko/docs/Web/HTTP/Access_control_CORS