๐ Ajax ์ด๋ฒคํธ ํ (Ajax Event Hooks)์ด๋?
Ajax ์ด๋ฒคํธ ํ (Ajax Event Hooks) ์ jQuery์์ Ajax ์์ฒญ์ด ์คํ๋ ๋ ํน์ ์ด๋ฒคํธ๋ฅผ ๊ฐ๋ก์ฑ์ ์ํ๋ ์์ ์ ์ํํ ์ ์๋๋ก ํ๋ ๊ธฐ๋ฅ์ด๋ค.
์ฆ, Ajax ์์ฒญ์ ์์, ์ฑ๊ณต, ์คํจ, ์๋ฃ ๋ฑ์ ์ด๋ฒคํธ๋ฅผ ๊ฐ์งํ์ฌ ํน์ ๋ก์ง์ ์คํํ ์ ์๋ค.
โ Ajax ์ด๋ฒคํธ ํ ์ข ๋ฅ
jQuery์์๋ ์ ์ญ ์ด๋ฒคํธ(Global Events)์ ๊ฐ๋ณ ์ด๋ฒคํธ(Local Events) ๋ ๊ฐ์ง ๋ฐฉ์์ผ๋ก Ajax ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค.
1๏ธโฃ ์ ์ญ ์ด๋ฒคํธ (Global Events)
์ ์ญ ์ด๋ฒคํธ๋ ๋ชจ๋ Ajax ์์ฒญ์ ๋ํด ๋์ผํ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์คํํ ๋ ์ฌ์ฉ๋๋ค.
์ด๋ฒคํธ ๋ฉ์๋ ์ค๋ช
| ajaxStart | Ajax ์์ฒญ์ด ์์๋ ๋ ์คํ |
| ajaxSend | Ajax ์์ฒญ์ ์๋ฒ์ ๋ณด๋ด๊ธฐ ์ง์ ์ ์คํ |
| ajaxSuccess | Ajax ์์ฒญ์ด ์ฑ๊ณตํ์ ๋ ์คํ |
| ajaxError | Ajax ์์ฒญ์ด ์คํจํ์ ๋ ์คํ |
| ajaxComplete | Ajax ์์ฒญ์ด ์๋ฃ๋์์ ๋ ์คํ (์ฑ๊ณต/์คํจ ๊ด๊ณ์์ด) |
| ajaxStop | ๋ชจ๋ Ajax ์์ฒญ์ด ๋๋ ํ ์คํ |
๐ ์ ์ญ ์ด๋ฒคํธ ์์
$(document).ready(function() {
// ๋ชจ๋ Ajax ์์ฒญ์ด ์์๋ ๋ ์คํ๋จ
$(document).ajaxStart(function() {
console.log("Ajax ์์ฒญ์ด ์์๋จ...");
});
// Ajax ์์ฒญ์ด ์๋ฒ๋ก ๋ณด๋ด์ง๊ธฐ ์ ์ ์คํ๋จ
$(document).ajaxSend(function(event, jqXHR, settings) {
console.log("์๋ฒ๋ก ์์ฒญ ๋ณด๋ด๊ธฐ ์ ", settings.url);
});
// Ajax ์์ฒญ์ด ์ฑ๊ณตํ์ ๋ ์คํ๋จ
$(document).ajaxSuccess(function(event, jqXHR, settings) {
console.log("์์ฒญ ์ฑ๊ณต:", settings.url);
});
// Ajax ์์ฒญ์ด ์คํจํ์ ๋ ์คํ๋จ
$(document).ajaxError(function(event, jqXHR, settings, error) {
console.error("์์ฒญ ์คํจ:", settings.url, "์๋ฌ:", error);
});
// Ajax ์์ฒญ์ด ์๋ฃ๋์์ ๋ (์ฑ๊ณต/์คํจ ์๊ด์์ด) ์คํ๋จ
$(document).ajaxComplete(function(event, jqXHR, settings) {
console.log("์์ฒญ ์๋ฃ:", settings.url);
});
// ๋ชจ๋ Ajax ์์ฒญ์ด ๋๋ ํ ์คํ๋จ
$(document).ajaxStop(function() {
console.log("๋ชจ๋ Ajax ์์ฒญ์ด ๋๋จ.");
});
});
โ ์ด๋ฒคํธ ์คํ ํ๋ฆ
- ajaxStart
- ajaxSend
- Ajax ์์ฒญ ์ํ (์ฑ๊ณต ๋๋ ์คํจ)
- ajaxSuccess ๋๋ ajaxError
- ajaxComplete
- ajaxStop (๋ชจ๋ Ajax ์์ฒญ์ด ๋๋ ๊ฒฝ์ฐ)
2๏ธโฃ ๊ฐ๋ณ ์ด๋ฒคํธ (Local Events)
๊ฐ๋ณ ์ด๋ฒคํธ๋ ํน์ Ajax ์์ฒญ์ ๋ํด์๋ง ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ ๋ ์ฌ์ฉ๋๋ค.
์ด๋ฒคํธ ๋ฉ์๋ ์ค๋ช
| beforeSend | Ajax ์์ฒญ์ ์๋ฒ์ ๋ณด๋ด๊ธฐ ์ ์ ์คํ |
| success | Ajax ์์ฒญ์ด ์ฑ๊ณตํ์ ๋ ์คํ |
| error | Ajax ์์ฒญ์ด ์คํจํ์ ๋ ์คํ |
| complete | Ajax ์์ฒญ์ด ์๋ฃ๋์์ ๋ ์คํ (์ฑ๊ณต/์คํจ ๊ด๊ณ์์ด) |
๐ ๊ฐ๋ณ ์ด๋ฒคํธ ์์
$.ajax({
url: "/api/data",
type: "GET",
beforeSend: function() {
console.log("๊ฐ๋ณ ์์ฒญ: ์๋ฒ๋ก ์์ฒญ ๋ณด๋ด๊ธฐ ์ ...");
},
success: function(response) {
console.log("๊ฐ๋ณ ์์ฒญ ์ฑ๊ณต:", response);
},
error: function(xhr, status, error) {
console.error("๊ฐ๋ณ ์์ฒญ ์คํจ:", error);
},
complete: function() {
console.log("๊ฐ๋ณ ์์ฒญ ์๋ฃ");
}
});
โ ์ด๋ฒคํธ ์คํ ํ๋ฆ
- beforeSend
- Ajax ์์ฒญ ์ํ
- success ๋๋ error
- complete
โ ์ ์ญ vs ๊ฐ๋ณ ์ด๋ฒคํธ ์ฐจ์ด์
๊ตฌ๋ถ ์ ์ญ ์ด๋ฒคํธ (ajaxStart, ajaxComplete) ๊ฐ๋ณ ์ด๋ฒคํธ (beforeSend, success)
| ์ ์ฉ ๋ฒ์ | ๋ชจ๋ Ajax ์์ฒญ์ ์ ์ฉ | ํน์ Ajax ์์ฒญ์๋ง ์ ์ฉ |
| ํธ์ถ ์์ | jQuery ๋ด๋ถ์์ ์๋์ผ๋ก ํธ์ถ๋จ | ๊ฐ๋ณ Ajax ์์ฒญ์์ ์ง์ ์ค์ |
| ๊ณตํต ์์ ์ฒ๋ฆฌ | ๋ก๋ฉ ์ธ๋์ผ์ดํฐ, ์ ์ญ ์๋ฌ ์ฒ๋ฆฌ ๋ฑ ์ ์ฒด Ajax ์์ฒญ์ ๋ํ ๊ณตํต ์์ ์ ์ฉ | ํน์ ์์ฒญ์๋ง ์ ์ฉ ๊ฐ๋ฅ |
โ ์ธ์ ์ ์ญ ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํด์ผ ํ ๊น?
- ๋ชจ๋ Ajax ์์ฒญ์ ๊ณตํต์ ์ผ๋ก ์คํํด์ผ ํ๋ ์์ ์ด ์์ ๋
- ex) ๋ก๋ฉ ์ ๋๋ฉ์ด์ ํ์, ๊ณตํต ์๋ฌ ๋ฉ์์ง ์ฒ๋ฆฌ, ์ธ์ฆ ํ ํฐ ์ถ๊ฐ
โ ์ธ์ ๊ฐ๋ณ ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํด์ผ ํ ๊น?
- ํน์ Ajax ์์ฒญ์ ๋ํด์๋ง ๋์ํด์ผ ํ ๋
- ex) ํน์ ์์ฒญ์ ์๋ต์ UI์ ๋ฐ์ํ๋ ๊ฒฝ์ฐ
โ ์ค์ ์์ : ๋ก๋ฉ ์ธ๋์ผ์ดํฐ ํ์
Ajax ์์ฒญ์ด ์งํ๋๋ ๋์ ๋ก๋ฉ ์คํผ๋๋ฅผ ํ์ํ๊ณ , ์๋ฃ๋๋ฉด ์จ๊ธฐ๋ ๋ฐฉ์
$(document).ajaxStart(function() {
$("#loading").show(); // Ajax ์์ ์ ๋ก๋ฉ ์์ด์ฝ ํ์
});
$(document).ajaxStop(function() {
$("#loading").hide(); // ๋ชจ๋ Ajax ์์ฒญ ์๋ฃ ์ ๋ก๋ฉ ์์ด์ฝ ์จ๊น
});
<div id="loading" style="display:none;">
<img src="loading.gif" alt="Loading...">
</div>
โ ์ด๋ ๊ฒ ํ๋ฉด ๋ชจ๋ Ajax ์์ฒญ์ด ์คํ๋ ๋ ์๋์ผ๋ก ๋ก๋ฉ UI๊ฐ ํ์๋๊ณ , ์๋ฃ๋๋ฉด ์ฌ๋ผ์ง.
โ ๊ฒฐ๋ก
- Ajax ์ด๋ฒคํธ ํ (Ajax Event Hooks) ์ Ajax ์์ฒญ์ด ์คํ๋ ๋ ํน์ ์ด๋ฒคํธ๋ฅผ ๊ฐ์งํ์ฌ ์ํ๋ ์์ ์ ์ํํ ์ ์๋๋ก ๋์์ฃผ๋ ๊ธฐ๋ฅ์ด๋ค.
- ์ ์ญ ์ด๋ฒคํธ (ajaxStart, ajaxComplete) ๋ ๋ชจ๋ Ajax ์์ฒญ์ ๋ํด ๊ณตํต์ ์ผ๋ก ์คํ๋๋ ๋ก์ง์ ์ ์ฉํ ๋ ์ฌ์ฉ.
- ๊ฐ๋ณ ์ด๋ฒคํธ (beforeSend, success) ๋ ํน์ Ajax ์์ฒญ์์๋ง ๋์ํ๋ ๋ก์ง์ ์ ์ฉํ ๋ ์ฌ์ฉ.
- ์ ์ญ ์ด๋ฒคํธ๋ ๋ก๋ฉ UI, ์ธ์ฆ ํ ํฐ ์ฒ๋ฆฌ ๋ฑ์ ์ ์ฉํ๊ณ , ๊ฐ๋ณ ์ด๋ฒคํธ๋ ๊ฐ๋ณ ์์ฒญ๋ณ ์ปค์คํ ์ฒ๋ฆฌ๊ฐ ํ์ํ ๋ ์ฌ์ฉํ๋ฉด ๋๋ค. ๐
'JavaScript > REACT' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| CDD (0) | 2025.01.17 |
|---|---|
| JSX (0) | 2025.01.17 |
| Custom Component (0) | 2025.01.17 |
| React State & Props (0) | 2025.01.17 |
| SPA (1) | 2025.01.17 |