๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

JavaScript/REACT

Ajax - ์ด๋ฒคํŠธ ํ›…

๐Ÿ“Œ 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 ์š”์ฒญ์ด ๋๋‚จ.");
    });
});

โœ… ์ด๋ฒคํŠธ ์‹คํ–‰ ํ๋ฆ„

  1. ajaxStart
  2. ajaxSend
  3. Ajax ์š”์ฒญ ์ˆ˜ํ–‰ (์„ฑ๊ณต ๋˜๋Š” ์‹คํŒจ)
  4. ajaxSuccess ๋˜๋Š” ajaxError
  5. ajaxComplete
  6. 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("๊ฐœ๋ณ„ ์š”์ฒญ ์™„๋ฃŒ");
    }
});

โœ… ์ด๋ฒคํŠธ ์‹คํ–‰ ํ๋ฆ„

  1. beforeSend
  2. Ajax ์š”์ฒญ ์ˆ˜ํ–‰
  3. success ๋˜๋Š” error
  4. 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