TIL. 15 Ajax - fetch ํ•จ์ˆ˜

Minjae Choiยท2021๋…„ 5์›” 25์ผ
0

Ajax

๋ชฉ๋ก ๋ณด๊ธฐ
1/2

๐ŸŽˆ Ajax๋ž€?


  • Ajax(Asynchronous JavaScript And XML) ์ „์ฒด ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ ๊ณ ์น˜์ง€ ์•Š๊ณ  ํŽ˜์ด์ง€ ์ผ๋ถ€๋งŒ์„ ์œ„ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค.(ํŒŒ์ผ์„ ์—ฌ๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ, ์›น ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด์„œ ์ž‘์—…ํ•ด์•ผ ํ•œ๋‹ค.)

  • fetch() ์›น ๋ธŒ๋ผ์šฐ์ €์— ๊ด„ํ˜ธ ์•ˆ์˜ ์ธ์ž๋ฅผ ์„œ๋ฒ„์—๊ฒŒ ์‘๋‹ตํ•ด๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ•œ๋‹ค๋Š” ๋œป์˜ ๋น„๋™๊ธฐ์  API์ด๋‹ค.

  • then ์„œ๋ฒ„์˜ ์‘๋‹ต์ด ๋๋‚˜๋ฉด ๋‹ค๋ฅธ ์ผ์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ

  • response fetch๋ฅผ ์‚ฌ์šฉํ•ด ์š”์ฒญํ–ˆ์„ ๋•Œ, ์›น ์„œ๋ฒ„๊ฐ€ ์‘๋‹ตํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋‹ด๊ณ ์žˆ๋Š” ๊ฐ์ฒด(object)์ด๋ฉฐ, ์ด ์•ˆ์— ์žˆ๋Š” ์—ฌ๋Ÿฌ ์†์„ฑ์„ ํ†ตํ•ด ์„œ๋ฒ„์™€ ํ†ต์‹ ์„ ํ•  ๋•Œ ์–ด๋– ํ•œ ์ƒํƒœ๋กœ ์ด๋ฃจ์–ด์กŒ๋Š”์ง€๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

  fetch('html').then(function(response) {
      response.text().then(function(text) {
          alert(text);
          document.querySelector('article').innerHTML = text;
      })
  })
  ---------------------------------------------------------------------------

// ์„œ๋ฒ„์— html์ด๋ผ๋Š” ํŒŒ์ผ์„ ์š”์ฒญํ•˜๊ณ  ์‘๋‹ต์ด ๋๋‚˜๋ฉด ์ตœ์ข…์ ์œผ๋กœ ๊ฒฝ๊ณ ์ฐฝ์ด ์‹คํ–‰๋œ๋‹ค.
   ์ด ๋•Œ ์‘๋‹ตํ•ด์ค€ ๋ฐ์ดํ„ฐ๋Š” text๋ผ๋Š” ๋ณ€์ˆ˜์— ๋‹ด๊ฒจ ์žˆ๋‹ค.

// ์›น ํŽ˜์ด์ง€์˜ ๋‚ด์šฉ์œผ๋กœ ๋ฐ”๊พธ๊ณ  ์‹ถ๋‹ค๋ฉด <body> ํƒœ๊ทธ ์•ˆ์— <article> ํƒœ๊ทธ๋ฅผ ๋งŒ๋“ค๊ณ ,
   alert(text) ๋ถ€๋ถ„์„ document.querySelector('article').innerHTML = text๋กœ ๋ณ€๊ฒฝ
  function callbackme() {
      console.log('response end');
  }
  fetch('html').then(callbackme);
  console.log(1);
  console.log(2);
  ---------------------------------------------------------------------------

// html์ด๋ผ๋Š” ํŒŒ์ผ์„ ์š”์ฒญ ํ›„, ์‘๋‹ต์ด ๋๋‚˜๋ฉด callbackme ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•ด๋ผ.

// html์„ ์š”์ฒญ ํ›„ ์ฝ˜์†”์— 1, 2๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ์‘๋‹ต์ด ๋๋‚˜๋ฉด then์œผ๋กœ ์ธํ•ด
   'response end'๋ฅผ ์ฝ˜์†”์— ์ถœ๋ ฅํ•œ๋‹ค.
  • ์ต๋ช… ํ•จ์ˆ˜ ์ด๋ฆ„์ด ์—†๋Š” ํ•จ์ˆ˜๋ฅผ ๋งํ•˜๋ฉฐ, ํ•œ ๊ณณ์—์„œ๋งŒ ๋…์ ‘์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜๋Š” ๊ตณ์ด ์„ ์–ธํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.
  function callbackme() {
      console.log('response end');
  }
  ----------------------------------------------------------------------------
  callbackme = function() {
      console.log('response end');
  }

// ์œ„ ํ•จ์ˆ˜์„ ์–ธ๊ณผ ์•„๋ž˜ ํ•จ์ˆ˜์„ ์–ธ์€ ๊ฐ™์€ ์˜๋ฏธ์ด๋‹ค.

  fetch('html').then(function() {
      console.log('response end');
  });
  console.log(1);
  console.log(2);

// callbackme๋ผ๋Š” ํ•จ์ˆ˜์„ ์–ธ์„ ์‚ญ์ œํ•˜๊ณ , ๊ทธ์™€ ๊ฐ™์€ ์˜๋ฏธ์˜ ์ฝ”๋“œ๋ฅผ ๋ถ™์—ฌ๋„ฃ์œผ๋ฉด ์ต๋ช… ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.


๐Ÿ“‹ fetch API ์‹ค์Šต

<html>
<head>
    <script src="
    https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js">
    </script>
    <script src="colors.js"></script>
</head>
<body>
    <h1><a href="index.html">WEB</a></h1>
    <input type="button" value="night" onclick="
        nightDayHandler(this);
    ">
    <ol>
        <li><a onclick="fetchPage('html')">HTML</a></li>
        <li><a onclick="fetchPage('css')">CSS</a></li>
        <li><a onclick="fetchPage('javascript')">JavaScript</a></li>
    </ol>
    <article></article>
    <script>
        function fetchPage(name) {
            fetch(name).then(function(response) {
                response.text().then(function(text) {
                    document.querySelector('article').innerHTML = text;
                })
            });
        }
    </script>
</body>
</html>

// ์ค‘๋ณต๋˜๋Š” fetch๋ฅผ ํ•จ์ˆ˜ํ™” ์‹œ์ผœ name์ด๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ , fetchPage('name')์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

// ๊ธฐ๋ณธ์ ์ธ .js, .html ํŒŒ์ผ๋“ค์€ ํ•œ๋ฒˆ๋งŒ ๋ถˆ๋Ÿฌ์˜ค๋ฉฐ html, css, javascript ํ…์ŠคํŠธ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์—ฌ ๋‚ด์šฉ๋งŒ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•˜์—ฌ ๋ณ€๊ฒฝ๋œ ์‚ฌํ•ญ์„ ๊ทธ ๋•Œ ๊ทธ ๋•Œ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€