Before
항상 jQuery의 ajax를 사용하여 비동기 요청을 주고 받았는데 요즘에는 대부분의 브라우저에서 fetch()를 지원한다는 글을 보았습니다. 그래서 저도 기본에 사용하던 $.ajax()를 fetch를 사용하여 바꿔 보기로 하였습니다.
$.ajax | GET 기존 코드
$.ajax({
url: getContextPath() +"/restapi/member/memberList" ,
type: 'get',
success: function(res) {
console.log("성공");
console.log(res);
},
error: function(xhr, error, msg) {
console.log(xhr);
console.log(error);
console.log(msg);
},
dataType: 'json'
})
아주 간단한 get
방식의 메서드 입니다. getContextPath()
의 경우 따로 선언했습니다. 필요하신 분들은 본문 하단을 참고하시길 바랍니다.
fetch | GET 변경 코드
fetch(getContextPath()+"/restapi/member/memberList", {
method: "get", // default값이 GET이어서 생략이 가능합니다.
})
.then((response) => response.json()) // response객체로부터 json포멧 응답 받기
.then((data) => console.log(data)); // json포멧 응답 javascript 객체로 변한하기
응답(response) 객체로 부터 JSON 포멧의 응답 전문을 자바스크립트 객체로 변환하여 얻을 수 있습니다.
Controller
@GetMapping("restapi/member/memberList")
public ResponseEntity<String> memberList(HttpServletRequest req){
ResponseEntity result = null;
result = ResponseEntity.status(HttpStatus.OK).body("admin");
HashMap<String, String> saveResult = new HashMap<>();
saveResult.put("member1", "admin");
saveResult.put("member2", "admin");
saveResult.put("member3", "admin");
return new ResponseEntity(saveResult, HttpStatus.OK);
}
위와 같이 간단하게 map에 추가한 데이터를 ResponseEntity로 반환하였습니다.
만약 post로 요청을 원하신다면 get 방식에 몇가지만 추가해 주시면 됩니다.
fetch | post 방식
fetch(getContextPath()+"/restapi/member/memberList", {
method: "post", // default값이 GET이어서 생략이 가능합니다.
headers: {
"Content-Type": "application/json", // 보내는 데이터가 json이라 알려줍니다.
},
body: JSON.stringfy({ // 보내는 데이터들을 json 직렬화 하여 body에 넣어 보냅니다.
titile: "TEST",
body: "testing...",
userId: 1,
}),
})
.then((response) => response.json()) // response객체로부터 json포멧 응답 받기
.then((data) => console.log(data)); // json포멧 응답 javascript 객체로 변한하기
나머지 값을 받아오는 방법은 같습니다.
getContextPath()
const getContextPath = function () {
let hostIndex = location.href.indexOf(location.host) + location.host.length;
let contextPath = location.href.substring(hostIndex, location.href.indexOf('/', hostIndex + 1));
return contextPath;
};
Result
생각보다 fetch 방식이 많이 간결하여 jQuery의 ajax방식보다 자주 사용하게 될 듯 합니다.
앞으로도 javascript만을 사용하여 코드들을 작성해볼 생각입니다.
References
https://www.daleseo.com/js-window-fetch/
- async와 await
728x90
반응형
'Languages > javaScript' 카테고리의 다른 글
[react] package.json - eslint 오류 (0) | 2023.04.26 |
---|---|
[javascript]Serialize시킬 시 주의할 점 (0) | 2021.11.22 |
[jQuery]< 1.6 or + prop() vs attr() (0) | 2021.11.12 |
[javascript] Uncaught TypeError: Cannot read properties of undefined (reading 'classList') modal.js:313 (0) | 2021.10.21 |
[javaScript]Element.innerHTML는<script>를 실행시키지 않습니다. (3) | 2021.10.18 |