๐AJAX
HTML, CSS, ์๋ฐ์คํฌ๋ฆฝํธ, DOM, XML ๋ฑ ๊ธฐ์กด์ ์ฌ์ฉ๋๋ ์ฌ๋ฌ ๊ธฐ์ ์ ํจ๊ป ์ฌ์ฉํ๋ ์๋ก์ด ๊ฐ๋ฐ ๊ธฐ๋ฒ์ด๋ค.
๋น๋๊ธฐ์ ์๋ฐ์คํฌ๋ฆฝํธ XML(Asynchronous Javascript And XML)์ ์ฝ์
๋น ๋ฅด๊ฒ ๋์ํ๋ ๋์ ์ธ ์น ํ์ด์ง๋ฅผ ๋ง๋ค๊ธฐ ์ํ ๊ฐ๋ฐ ๊ธฐ๋ฒ์ ํ๋
*๋๊ธฐ์ => async : false - ์๋๋ฐฉ DATA๊ฐ ๋ ๋ผ์ฌ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ
*๋น๋๊ธฐ์ => async : true - ๋ ๋ผ์ค๋ DATA ์ ๊ฒฝ์์ฐ๊ณ ํ ์ผ ํ๋ ๊ฒ
์น ํ์ด์ง ์ ์ฒด๋ฅผ ๋ค์ ๋ก๋ฉํ์ง ์๊ณ ๋, ์น ํ์ด์ง์ ์ผ๋ถ๋ถ๋ง์ ๊ฐฑ์ ํ ์ ์๋ค.
์ฆ, ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ญ์์ ์๋ฒ์ ํต์ ํ์ฌ, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์น ํ์ด์ง์ ์ผ๋ถ๋ถ์๋ง ํ์ํ ์ ์๋ค!
๐๋์ ์๋ฆฌ
Ajax๋ฅผ ์ด์ฉํ ์น ์์ฉ ํ๋ก๊ทธ๋จ์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ํตํด ์น ์๋ฒ์ ํต์ ์ ํ๊ฒ ๋๋ค.
๋ฐ๋ผ์ ์ฌ์ฉ์์ ๋์์๋ ์ํฅ์ ์ฃผ์ง ์์ผ๋ฉด์๋ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ง์ํด์ ์๋ฒ์ ํต์ ํ ์ ์๋ค.
- ์ฌ์ฉ์์ ์ํ ์์ฒญ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ค.
- ์ด๋ฒคํธ ํธ๋ค๋ฌ์ ์ํด ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ํธ์ถ๋๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ๋ XMLHttpRequest ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ๋ก ์์ฒญ์ ๋ณด๋ธ๋ค.(์ด๋ ์น ๋ธ๋ผ์ฐ์ ๋ ์์ฒญ์ ๋ณด๋ด๊ณ , ์๋ฒ์ ์๋ต์ ๊ธฐ๋ค๋ฆด ํ์ ์์ด ๋ค๋ฅธ ์์ ์ ์ฒ๋ฆฌํ ์ ์๋ค.)
- ์๋ฒ๋ ์ ๋ฌ๋ฐ์ XMLHttpRequest ๊ฐ์ฒด๋ฅผ ๊ฐ์ง๊ณ Ajax ์์ฒญ์ ์ฒ๋ฆฌํ๋ค.
- ์๋ฒ๋ ์ฒ๋ฆฌํ ๊ฒฐ๊ณผ๋ฅผ HTML, XML ๋๋ JSON ํํ์ ๋ฐ์ดํฐ๋ก ์น ๋ธ๋ผ์ฐ์ ์ ์ ๋ฌํ๋ค.(์ด๋ ์ ๋ฌ๋๋ ์๋ต์ ์๋ก์ด ํ์ด์ง๋ฅผ ์ ๋ถ ๋ณด๋ด๋ ๊ฒ์ด ์๋๋ผ ํ์ํ ๋ฐ์ดํฐ๋ง์ ์ ๋ฌํ๋ค.)
- ์๋ฒ๋ก๋ถํฐ ์ ๋ฌ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์น ํ์ด์ง์ ์ผ๋ถ๋ถ๋ง์ ๊ฐฑ์ ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํธ์ถํ๋ค.
- ๊ฒฐ๊ณผ์ ์ผ๋ก ์น ํ์ด์ง์ ์ผ๋ถ๋ถ๋ง์ด ๋ค์ ๋ก๋ฉ๋์ด ํ์๋๋ค.
๐XMLHttpRequest ๊ฐ์ฒด
Ajax์ ๊ฐ์ฅ ํต์ฌ์ ์ธ ๊ตฌ์ฑ ์์!
์น ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ๊ตํํ ๋ ์ฌ์ฉ๋๋ค.
์น ๋ธ๋ผ์ฐ์ ๊ฐ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๊ณ์ํด์ ์๋ฒ์ ํต์ ํ ์ ์๋ ๊ฒ์ ๋ฐ๋ก ์ด ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ด๋ค.
๐jQuery๋ฅผ ์ด์ฉํ Ajax
jQuery๋ฅผ ์ด์ฉํ์ฌ Ajax๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๋ง์ ์์ค ๋์ ๋ช ์ค์ผ๋ก ๊ฐ๋จํ๊ฒ Server์ Data๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ค.
jQuery์์ ์ ๊ณตํ๋ $.ajax([settings]) ํจ์๋ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
$.ajax ({
// URL์ ํ์ ์์์ด๋ฏ๋ก ๋ฐ๋์ ๊ตฌํํด์ผ ํ๋ Property์
๋๋ค.
url : "url", // ์์ฒญ์ด ์ ์ก๋ URL ์ฃผ์
type : "GET", // http ์์ฒญ ๋ฐฉ์ (default: ‘GET’)
async : true, // ์์ฒญ ์ ๋๊ธฐํ ์ฌ๋ถ. ๊ธฐ๋ณธ์ ๋น๋๊ธฐ(asynchronous) ์์ฒญ (default: true)
cache : true, // ์บ์ ์ฌ๋ถ
timeout : 3000, // ์์ฒญ ์ ํ ์๊ฐ ์์ ์๋ฃ๋์ง ์์ผ๋ฉด ์์ฒญ์ ์ทจ์ํ๊ฑฐ๋ error ์ฝ๋ฐฑ์ ํธ์ถ.(๋จ์: ms)
data : {key : value}, // ์์ฒญ ์ ํฌํจ๋์ด์ง ๋ฐ์ดํฐ
processData : true, // ๋ฐ์ดํฐ๋ฅผ ์ปจํ
ํธ ํ์
์ ๋ง๊ฒ ๋ณํ ์ฌ๋ถ
contentType : "application/json", // ์์ฒญ ์ปจํ
ํธ ํ์
dataType : "json", // ์๋ต ๋ฐ์ดํฐ ํ์ (๋ช
์ํ์ง ์์ ๊ฒฝ์ฐ ์๋์ผ๋ก ์ถ์ธก)
beforeSend : function () {
// XHR Header๋ฅผ ํฌํจํด์ HTTP Request๋ฅผ ํ๊ธฐ์ ์ ํธ์ถ๋ฉ๋๋ค.
},
success : function(data, status, xhr) {
// ์ ์์ ์ผ๋ก ์๋ต ๋ฐ์์ ๊ฒฝ์ฐ์๋ success ์ฝ๋ฐฑ์ด ํธ์ถ๋๊ฒ ๋ฉ๋๋ค.
// ์ด ์ฝ๋ฐฑ ํจ์์ ํ๋ผ๋ฏธํฐ์์๋ ์๋ต ๋ฐ๋, ์๋ต ์ฝ๋ ๊ทธ๋ฆฌ๊ณ XHR ํค๋๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
},
error : function(xhr, status, error) {
// ์๋ต์ ๋ฐ์ง ๋ชปํ์๋ค๊ฑฐ๋ ์ ์์ ์ธ ์๋ต์ด์ง๋ง ๋ฐ์ดํฐ ํ์์ ํ์ธํ ์ ์๊ธฐ ๋๋ฌธ์
// error ์ฝ๋ฐฑ์ด ํธ์ถ๋ ์ ์์ต๋๋ค.
// ์๋ฅผ ๋ค์ด, dataType์ ์ง์ ํด์ ์๋ต ๋ฐ์ ๋ฐ์ดํฐ ํ์์ ์ง์ ํ์์ง๋ง,
// ์๋ฒ์์๋ ๋ค๋ฅธ ๋ฐ์ดํฐํ์์ผ๋ก ์๋ตํ๋ฉด error ์ฝ๋ฐฑ์ด ํธ์ถ๋๊ฒ ๋ฉ๋๋ค.
},
complete : function(xhr, status) {
// success์ error ์ฝ๋ฐฑ์ด ํธ์ถ๋ ํ์ ๋ฐ๋์ ํธ์ถ๋ฉ๋๋ค.
// try - catch - finally์ finally ๊ตฌ๋ฌธ๊ณผ ๋์ผํฉ๋๋ค.
}
});
์ฐธ์กฐ
'JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript]JSON(JavaScript Object Notation)์ด๋? (1) | 2022.08.31 |
---|---|
[JavaScript]jQuery๊ฐ์ฒด (2) | 2022.08.29 |