Ajax는 원하는 url을 통해 데이터를 주고 받을 수 있게 해줍니다.
이를 이용해서 데이터를 가져와 활용하고, 비동기적으로 페이지를 업데이트 등을 할 수 있습니다.
1. Ajax 사용 준비
먼저 Ajax는 Jquery의 내장돼있으므로 Jquery 사용이 필요합니다.
1. url을 사용하는 CDN 방식
<script src="https://code.jquery.com/jquery-3.7.1.js"/>
2. js 파일을 다운로드하여 참조하는 방식
Download jQuery | jQuery
link Downloading jQuery Compressed and uncompressed copies of jQuery files are available. The uncompressed file is best used during development or debugging; the compressed file saves bandwidth and improves performance in production. You can also download
jquery.com
2. Ajax 문법
$.ajax({
url: ""
type: ["get", "post"]
contentType: controller로 보내는 값의 유형 ["application/json; charset-utf-8"]
data: controller로 보낼 데이터
dataType: controller에서 받는 값의 유형 ["json"]
success: function() // 정상적으로 응답했을 때 실행할 함수
error: function() // 응답 실패 했을 때 실행할 함수 (data type 오류, 컨트롤러 실행 오류 등)
async: true/false // default가 true이며 false로 비동기 실행을 끌 수 있음
})
3. ResponseBody / RequestBody
Ajax에서 보낸 데이터는 controller에서 @RequestBody를 통해 받으면 자동으로 객체, Map에 알맞게 들어가게 된다.
@ResponeBody가 붙은 controller면 리턴하는 값 자체가 body가 되어 전송된다. Map 또는 객체 등을 바로 전송해도 json 형태로 전송이 된다.
4. Json.stringify / Json.parse
Ajax에서 data를 보낼 때, Json.stringify를 하면 { } 형태로 작성된 객체를 json으로 변경해서 전송한다.
Ajax에서 data를 받을 때, Json.parse를 하면 json(문자열) 형태로 전송된 객체를 { } 객체로 변경한다.
-> ajax에서 json으로 전달받아도 객체를 보냈다면 자동으로 변환되므로 안해도 되는 경우도 많다. 보낼 때 실제로 json 문자열 또는 objectMapper로 문자열이 된 객체일 때만 사용하면 됨.
5. 주의할 점 (디버깅)
- 정상적으로 실행이 된 거 같은데 error로 이동하는 경우
: 응답하는 데이터의 type이 맞지 않음
- controller에서 리턴하는 view로 이동 안함
: ajax는 url에서 데이터를 가져오기 위함이고 이동을 하기 위한 것이 아님! 이동은 success 함수 내에서 location.href 이용
새로운 view에 데이터도 전달하고 싶다 -> form을 쓰거나 query parameter를 보내는 href 사용
- 분명 데이터를 가져와서 succee에서 바깥에 있는 변수를 업데이트 했는데 반영이 안됨
: ajax는 비동기적 실행이므로 success를 실행하기 전에 뒤에 있는 코드를 먼저 실행할 수도 있다.
success 안에서 해당 코드를 실행할 수 있게 하거나, async를 false로 한다.
틀린 것은 지적, 궁금한 것은 질문 남겨주세요!
'공부 > 백엔드' 카테고리의 다른 글
| [스프링 부트 핵심 가이드] 1~3 : 스프링부트, MVC, 디자인패턴 (0) | 2024.04.25 |
|---|---|
| Backend 개발자 커리어 로드맵 (어떤 백엔드 개발자로 성장할까?) (0) | 2024.02.22 |
| [ObjectMapper] json String -> List<Map> 변환 (0) | 2023.11.07 |
| Controller에서 값을 받는 방법들 - RequestParam, RequestBody, ModelAttribute, PathVariable, HttpServletRequest, MultipartHttpServletRequest (0) | 2023.10.14 |
| [Web] Kopring이 뭘까? : Spring+Kotlin 웹 (0) | 2023.07.27 |