๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“’ JavaScript

[์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ] fetch() API ํ•จ์ˆ˜๋กœ ํ˜ธ์ถœํ•˜๊ธฐ

by Tamii 2021. 2. 26.
๋ฐ˜์‘ํ˜•

AJAX 

์›น๋ธŒ๋ผ์šฐ์ €์—์„œ javascript๋ฅผ ์ด์šฉํ•ด ์›น์„œ๋ฒ„์— ์ ‘์†, ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ

ํŽ˜์—์ง€ ๋‚ด์˜ ์ •๋ณด๋“ค์„ ๋ถ€๋ถ„์ ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ˆ  

ํ•„์š”ํ•œ ์ •๋ณด๋งŒ์„ ๋ถ€๋ถ„์ ์œผ๋กœ ์ •๊ตํ•˜๊ฒŒ ๊ฐ€์ ธ์˜ค๋Š” ๊ธฐ์ˆ  

ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๋ถ€๋ถ„์ ์œผ๋กœ ์›นํŽ˜์ด์ง€๋ฅผ ๋กœ๋”ฉํ•  ์ˆ˜ ์žˆ์–ด  ์ž์› ์ ˆ์•ฝ ๊ฐ€๋Šฅ 

 

 

 

 

 

 

๊ทธ์ค‘ ์ตœ์‹ ์ธ,

fetch API 

๋‹จ๊ณ„๋ณ„๋กœ ๋ฐฐ์›Œ๋ณด๊ธฐ step by step๐Ÿงฆ

 

fetch('javascript')

ํด๋ผ์ด์–ธํŠธ -> ์„œ๋ฒ„

์›น๋ธŒ๋ผ์šฐ์ €! 'javascript'๋ผ๋Š” ํŒŒ์ผ์„ ์„œ๋ฒ„์—๊ฒŒ ์‘๋‹ตํ•ด์ค˜

 

 

 

fuunction callbackme(){
            
}
        
        
fetch('html').then(callbackme);

์„œ๋ฒ„๊ฐ€ ์‘๋‹ตํ•  ๋•Œ ๊นŒ์ง€ ๋‹ค๋ฅธ ์ผ์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก then์„ ์‚ฌ์šฉ 

'html' ํŒŒ์ผ์„ ์„œ๋ฒ„์—๊ฒŒ ์‘๋‹ตํ•ด์ฃผ๊ณ   ์‘๋‹ต์ด ๋๋‚˜๋ฉด callbackme๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œ์ผœ

function callbackme(){
  console.log('response end');

}


fetch('html').then(callbackme);
console.log(1);
console.log(2);

 clonsole ์ถœ๋ ฅ : 1 >2 > response end

 

 

 

-> ๋ณดํ†ต์€ callback ํ•จ์ˆ˜์ฒ˜๋Ÿผ ์ด๋ฆ„์„ ์ •ํ•˜์ง€ ์•Š๊ณ  ์ต๋ช…ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉ 

callbackme ๋ฅผ ๋ฐ”๊พธ๋ฉด ์ด๋Ÿฐ ๋ชจ์–‘์ด ๋˜๋Š”๋ฐ ์ด๊ฑธ fetch.then( _______) callback ํ•จ์ˆ˜ ์ž๋ฆฌ์— ๋„ฃ์–ด์ฃผ๋ฉด

   callbackme = function(){
       console.log('response end');
   }

์ด๊ฒƒ์„ callbackme ์ž๋ฆฌ์— ๋„ฃ์–ด์ฃผ๋ฉด ์ต๋ช…ํ•จ์ˆ˜ํ™” ๋จ

 

 

 

 

response

 fetch('css').then( function(response){
     console.log(response);
     
 });
 fetch('css').then( function(response){
     console.log(response.status);
     if(response.status=='404'){
          alert('Not found')
     }
 });

fetch๋ฅผ ํ†ตํ•ด ์š”์ฒญํ–‡์„ ๋Œ€ ์›น์„œ๋ฒ„๊ฐ€ ์‘๋‹ตํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๊ฐ์ฒด 

๊ทธ ์•ˆ์— ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์†์„ฑ์ด ์ž‡์Œ (ex status)

์†์„ฑ์„ ํ™œ์šฉํ•˜์—ฌ ์—๋Ÿฌ ์‹œ ์•Œ๋žŒ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

 

 

 

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

response์ค‘ text() ์†์„ฑ์„ ๊ณ ๋ฅธ ํ›„

๊ทธ ์†์„ฑ์„ ์ด ํŒŒ์ผ์˜ 'article' ์š”์†Œ์— HTML ๋กœ ๋„ฃ๊ธฐ

 

 

 

 

ํ•จ์ˆ˜ํ™” ํ•˜์—ฌ ๊น”๋”ํ•œ ์ฝ”๋“œ ๊ฐ€๋Šฅ!

    function fetchPage(name){
      fetch(name).then(function(response){
            response.text().then(function(text){
                document.querySelector('article').innerHTML=text;
            })
        })
    }
<li><a onclick = "fetchPage('html')">HTML</a></li>

HTML ๋ฆฌ์ŠคํŠธ์š”์†Œ๋ฅผ ํด๋ฆญํ•˜๋ฉด, HTML์˜ 'article'๊ตฌ๊ฐ„์— ์‘๋‹ต๋ฐ›์€ ์ž๋ฃŒ ๋„ฃ๊ธฐ

 

 

 

 

๐Ÿ˜‰WOW ์•„์ฃผ ๊ฐ„๋‹จํ•œ fetch๋™์ž‘์„ ์„ฑ๊ณตํ–ˆ๋‹ค

 

 

 

 

 

 

 

 

 

 

 


Hash

 

    if (location.hash) {        
            console.log(location.hash.substr(1));
        } 
        else {
            
        }

 

๋ฐ์ดํ„ฐ์™€ ๋กœ์ง ์„ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

๋ฐ์ดํ„ฐ: ๋ฐ”๋€” ์ˆ˜ ์žˆ๋Š” ์„ฑ์งˆ 

๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”๊ฟ”๋„ aplication์— ์˜ํ–ฅ์ด ์—†๋„๋ก ์„ค๊ณ„๊ฐ€ ๊ฐ€๋Šฅํ•จ

 

 

 

 

 

nav ์ธ๊ตฌ๊ฐ„์„ ๋น„์›Œ๋‘๊ณ 

'list' ํŒŒ์ผ์„  HTML ์— id๊ฐ€ nav์ธ ๊ตฌ๊ฐ„์— ๋„ฃ๊ธฐ

 <ol id="nav">
 
  </ol>
fetch('list').then(function(response){
            response.text().then(function(text){
                document.querySelector('#nav').innerHTML=text;
            })
        })

 

 

 

๊ทธ๋ ‡๋‹ด ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด์ค„๋•Œ ๋ฐ์ดํ„ฐ, ๋งŒ ๋„ฃ์–ด์•ผ ํ•˜๋Š”๋ฐ ํ˜„์žฌ list ํŒŒ์ผ์€

   <li><a href="#!html" onclick = "fetchPage('html')">HTML</a></li>
    <li><a href="#!css" onclick= "fetchPage('css')">CSS</a></li>
    <li><a href="#!javscript" onclick="fetchPage('javascript')">JavaScript</a></li>

์ด๋ ‡๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Œ. 

๋ฐ์ดํ„ฐ๊ฐ€ rawํ˜•ํƒœ๋กœ ๋“ค์–ด๊ฐ€๋„ ํ˜•ํƒœ์— ์•Œ๋งž๊ฒŒ ๋ณ€ํ™˜์ด ๊ฐ€๋Šฅํ•ด์•ผ ํ•จ! 

 

 

 

fetch('list').then(function(response){
            response.text().then(function(text){
              console.log(text); // html,css,javascript

              var items = text.split(',');
              var i=0;
              var tags='';
              
              while(i<items.length){
                var item = items[i];
                console.log(item);   // ex) javascript
                
                //item ๊ฐ ๊ธ€์ž์˜ ์•ž๋’ค ๊ณต๋ฐฑ ์ œ๊ฑฐ
                item=item.trim();
                var tag= '<li><a href="#!'+item+'"onclick="fetchPage(\''+item+'\')">'+item+'</a></li>';
                tags+=tag;
                console.log(tag);
                i+=1;
              }
              console.log(items);
              document.querySelector('#nav').innerHTML=tags;


            })
        });

์ด๋ ‡๊ฒŒ ์‚ฌ์šฉ์ž๋Š” list ๋ผ๋Š” ํŒŒ์ผ์— ๋ฐ์ดํ„ฐ๋งŒ ๋„ฃ์–ด์ฃผ๋ฉด 

text= html, css, javascript ๋ฅผ 

items = [html, css, javascript] ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค์–ด

item = html ( ๋ฐฐ์—ด ๋‚ด ๋‚ด์šฉ ๊ฐ๊ฐ )

HTML ๊ตฌ๋ฌธ์œผ๋กœ ๋งŒ๋“ค์–ด 

tags = <li><a href="#!html"onclick="fetchPage('html')">html</a></li> <li~~~

#nav ๋ถ€๋ถ„์— ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค .

 

 

 

 

๊ทธ๋Ÿฌ๋ฉด list ์˜ ๋ฐ์ดํ„ฐ๋ฅผ html๋กœ ๊ตฌํ˜„ ์™„๋ฃŒ!

์ด์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ๋Š” ๋ฐ์ดํ„ฐ๋กœ ๋‚˜๋ˆ„๊ณ  ๊ตฌํ˜„์€ ๊ตฌํ˜„์œผ๋กœ ๋‚˜๋ˆ„๋ฉด 

๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ”๋€Œ์–ด๋„ application์€ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ณ  

 

โˆ™ application์ž…์žฅ: ์‚ฌ์šฉ์ž๋“ค์ด ์ฝ”๋“œ๋ฅผ ๋งˆ์Œ๋Œ€๋กœ ์ˆ˜์ •ํ•˜๋ฉฐ ์ƒ๊ธธ ์‚ฌ๊ณ  ๋ฐฉ์ง€

โˆ™ ์ปจํ…์ธ  ์ž…๋ ฅ์ž…์žฅ:  ์ž…๋ ฅ ๊ณต๊ฐ„, ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ž์œ ๋กœ์šธ ์ˆ˜ ์žˆ์Œ 

 

 

 

์ฐธ๊ณ ์˜์ƒ

opentutorials.org/course/3281/20576

๋Œ“๊ธ€