๐ AJAX(Async JavaScript and XML)
- ๋น๋๊ธฐ ์๋ฐ์คํฌ๋ฆฝํธ์ XML(์์ฆ์ JSON์ ๋ง์ด ์ฌ์ฉ)
- ํด๋น ์น ํ์ด์ง๋ฅผ ์๋ก๊ณ ์นจํ์ง ์๊ณ ์์ฒญ์ ๋ณด๋ด ์๋ต ๋ฐ์ ๋ด์ฉ์ ํ์ฌ ํ์ด์ง์ ๋ฐ์ํ ์ ์๋ ๋ฌธ๋ฒ
- ์นํ์ด์ง ์ ์ฒด๋ฅผ ๋ค์ ๋ก๋ฉํ์ง ์๊ณ ๋ ์นํ์ด์ง์ ์ผ๋ถ๋ถ๋ง์ ๊ฐฑ์ ํ ์ ์๊ณ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ญ์์ ์๋ฒ์ ํต์ ํ์ฌ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์นํ์ด์ง์ ์ผ๋ถ๋ถ์๋ง ํ์ํ ์ ์๋ค
- ์ฃผ๋ก @RestController์ ์์ฒญ์ ๋ณด๋ด ๋ฐ์ดํฐ๋ง ๊ฐ์ ธ์์ ํ์ฉํ๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ๋ค
- ์๋ฒ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์๋ต๋ฐ์ ๋ ๋ง๋ค ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๊ณ ํด๋น ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ์ฌ ์ฌ์ฉํ๋ค
๐ XMLHttpRequest
- ์๋ฐ์คํฌ๋ฆฝํธ์ ๋น๋๊ธฐ ํต์ ์์ฒญ ๊ฐ์ฒด(AJAX ์์ฒญ ๊ฐ์ฒด)
- ์์ฒญ์ ๋ณด๋ด๋ ํ์ด์ง๊ฐ ์๋ก๊ณ ์นจ๋์ง ์๋๋ค
- ์ธ์คํด์ค๋ฅผ ์์ฑํ ํ ํด๋น ์ธ์คํด์ค์ ์ฌ๋ฌ ์ค์ ์ ํ ๋ค ์์ฒญ์ ๋ณด๋ธ๋ค
- ์น ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ๊ตํํ ๋ ์ฌ์ฉํ๋ค(์น ๋ธ๋ผ์ฐ์ ๊ฐ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์๋ฒ์ ๊ณ์ ํต์ ํ ์ ์๋ ์ด์ )
๐ ์๋ฒ์ ์์ฒญ(request)ํ๊ธฐ
๐ผ open(method, url) ๋ฉ์๋
- ์๋ฒ๋ก ๋ณด๋ผ ajax ์์ฒญ์ ํ์์ ์ค์
- ์ฒซ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ์๋ ์์ฒญ ๋ฐฉ์์ ์ค์ (GET, POST ๋ฐฉ์ ์ค ํ๋ ์ ํ, ์ด์ธ์ ๋ฉ์๋(PUT, DELETE)๋ xhttp๋ก๋ง ๋ณด๋ผ ์ ์๋ค(form์ผ๋ก๋ ๋ชป๋ณด๋))
- ๋ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ์๋ ์์ฒญ URL์ ์ค์ ํ๋ค
๐ผ send() ๋ฉ์๋
- ์์ฑ๋ ajax ์์ฒญ์ ์๋ฒ๋ก ์ ๋ฌํ๋ค
- ์ ๋ฌ๋ฐฉ์์ ๋ฐ๋ผ ์ธ์๋ฅผ ๊ฐ์ง์๋, ์๊ฐ์ง์๋ ์๋ค(GET๋ฐฉ์์ ๊ฒฝ์ฐ๋ url๋ก ํ๋ผ๋ฏธํฐ๋ฅผ ๋๊ฒจ์ฃผ์ง๋ง POST์ธ ๊ฒฝ์ฐ์๋ send()์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ค์ด์ ๋๊ฒจ์ค์ผ ํ๋ค)
โป AJAX์์๋ ์ฃผ๋ก GET๋ฐฉ์ ๋ณด๋ค๋ POST๋ฐฉ์์ ์ฌ์ฉํ์ฌ ์์ฒญ์ ์ ์กํ๋ค
๐ ์๋ฒ์ ์๋ต(response)ํ๊ธฐ
๐ผ readyState
- XMLHttpRequest ๊ฐ์ฒด์ ํ์ฌ ์ํ๋ฅผ ๋ํ๋ธ๋ค
- ๊ฐ์ฒด์ ํ์ฌ ์ํ์ ๋ฐ๋ผ ๊ฐ์ด ๋ณํํ๋ค
1. UNSENT(์ซ์ 0) : XMLHttpRequest ๊ฐ์ฒด๊ฐ ์์ฑ๋จ
2. OPENED(์ซ์ 1) : open()๋ฉ์๋๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์คํ๋จ
3. HEADERS_RECEIVED(์ซ์ 2) : ๋ชจ๋ ์์ฒญ์ ๋ํ ์๋ต์ด ๋์ฐฉ
4. LOADING(์ซ์ 3) : ์์ฒญํ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌ์ค
5. DONE(์ซ์ 4) : ์์ฒญํ ๋ฐ์ดํฐ์ ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋์ด ์๋ตํ ์ค๋น๊ฐ ์๋ฃ๋จ
๐ผ status
- ์๋ฒ์ ๋ฌธ์์ํ๋ฅผ ๋ํ๋ธ๋ค(HTTP ์ํ์ฝ๋)
- 1xx : ์กฐ๊ฑด๋ถ ์๋ต
- 2xx : ์ฑ๊ณต(์๋ฒ์ ๋ฌธ์๊ฐ ์กด์ฌํจ)
- 3xx : ๋ฆฌ๋ค์ด๋ ์
์๋ฃ
- 4xx : ์์ฒญ ์ค๋ฅ (404- ์๋ฒ์ ๋ฌธ์๊ฐ ์กด์ฌํ์ง ์์)
- 5xx : ์๋ฒ ์ค๋ฅ
๐ผ onreadystatechange
- XMLHttpRequest ๊ฐ์ฒด์ readyState ํ๋กํผํฐ ๊ฐ์ด ๋ณํ ๋ ๋ง๋ค ํธ์ถ๋๋ ์ด๋ฒคํธ
- ์๋ฒ์์ ์๋ต์ด ๋์ฐฉํ ๋๊น์ง readyStateํ๋กํผํฐ ๊ฐ์ ๋ณํ์ ๋ฐ๋ผ ์ด 5๋ฒ ํธ์ถ๋๋ค
- ์ด ํ๋กํผํฐ๋ฅผ ์ด์ฉํ๋ฉด ์๋ฒ์ ์์ฒญํ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๊ณ , ์๋ฒ๋ก๋ถํฐ ์๋ต์ด ๋์ฐฉํ๋ ์๊ฐ์ ํน์ ํ ์ ์๋ค
- readyState 0 : XMLHttpRequest ๊ฐ์ฒด๊ฐ ์์ฑ๋์์ ๋
- readyState 1 : open()์ด ์ฑ๊ณตํ์ ๋ (send()ํ๊ธฐ ์ )
- readyState 2 : ์์ฒญ์ ๋ํ ์๋ต์ด ๋์ฐฉํ์ ๋
- readyState 3 : ์๋ต์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ์์ํ์ ๋
- readyState 4 : ์๋ต์ ๋ํ ์ฒ๋ฆฌ๊ฐ ๋ชจ๋ ๋๋ฌ์ ๋
๐ ์๋ฒ๋ก๋ถํฐ์ ์๋ต ๋ฐ์ดํฐ ํ์ธํ๊ธฐ
๐ผ responseText
- ์๋ฒ์ ์์ฒญํ์ฌ ์๋ต๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฌธ์์ด๋ก ๋ฐํํ๋ค
- ์๋ฒ๋ก๋ถํฐ ํ
์คํธํ์ผ์ ์๋ต๋ฐ์ ๊ฒฝ์ฐ์๋ responseText๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฌธ์์ด๋ก ๋ฐํํ ํ ์ฌ์ฉํ ์ ์๋ค
๐ผ responseXML
- ์๋ฒ์ ์์ฒญํ์ฌ ์๋ต๋ฐ์ ๋ฐ์ดํฐ๋ฅผ XML DOM ๊ฐ์ฒด๋ก ๋ฐํํ๋ค
- ์ด๋ฐฉ๋ฒ์ ์ ์์ด๋ค ,,, (๊ท์ฐฎ์)
- ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด์ ํต์ ์ ์๋ก์๊ฒ ์ ๋ฌํด์ผ ํ ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๋ค
- AJAX๋ฅผ ์ฌ์ฉํ์ฌ Http์์ฒญ ํค๋๋ฅผ ์ง์ ์ค์ ํ๊ฑฐ๋ Http์๋ต ํค๋์ ๋ด์ฉ์ ์ง์ ํ์ธํ ์๋ ์๋ค
- ์์ฒญ์ ๋ณด๋ด๊ธฐ ์ ์ setRequestHeader()๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ Http์์ฒญ ํค๋๋ฅผ ์์ฑํ ์ ์๋ค
- ์์ฒญ์ ๋ณด๋ด๊ธฐ ์ ์ setRequestHeader()๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ Http์์ฒญ ํค๋๋ฅผ ์์ฑํ ์ ์๋ค
- name์ Http์์ฒญ ํค๋์ ํฌํจํ๊ณ ์ ํ๋ ํค๋์ ์ด๋ฆ์ด๋ฉฐ, ๊ฐ๋ ํจ๊ป ์ ๋ฌํ๋ค
- ์๋ฒ๋ก ๋ถํฐ ์ ๋ฌ๋ฐ์ Http์๋ต ํค๋ ๋ด์ฉ์ ๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ ํ์ธํ ์ ์๋ค
- getAllResponseHeaders() : Http์๋ต ํค๋์ ๋ชจ๋ ํค๋๋ฅผ ๋ฌธ์์ด๋ก ๋ฐํํ๋ค
- getResponseHeader() : Http์๋ต ํค๋ ์ค ์ธ์๋ก ์ ๋ฌ๋ฐ์ ์ด๋ฆ๊ณผ ์ผ์นํ๋ ํค๋์ ๊ฐ์ ๋ฌธ์์ด๋ก ๋ฐํํ๋ค
๐ผ Content-Type
- ์์ฒญ ๋๋ ์๋ต์ ๋ฐ์ดํฐ๊ฐ ์ด๋ค ํ์์ธ์ง ํ๋จ
- ์์์ ํ์(Media Type)์ ๋ช
์ํ๊ธฐ ์ํด ํค๋์ ์ค๋ ค์ ์ ์ก๋๋ค
- ๊ธฐ๋ณธ๊ฐ์ html๋ฌธ์์ MIMEํ์
์ธ "text/html"์ด๋ค
๐ ์ฐธ๊ณ ์๋ฃ
โ
Ajax_์ฌ์ฉ๋ฒ