본문 바로가기
Frontend/JavaScript

[Javascript] Ajax/fetch

by joy_95 2021. 10. 27.

0 fetch란?


fetch 함수는 XMLHttpRequest 객체와 마찬가지로 HTTP 요청 전송 기능을 제공하는 클라이언트 사이트 Web API이다.

 

 

 

 

1 fetch 사용법


<!DOCTYPE html>
<html lang="ko">
<body>
    <article></article>
    <input type="button" value="fetch" onclick="
    fetch('css').then(function(response){ 
        response.text().then(function(text){
            alert(text);
        })
    })
    ">

</body>
</html>

fetch('css')

첫번째 인자로 전달된 데이터를 서버에게 요청한다.

 

then()

최종적으로 응답이 끝나면 실행된다.

 

alert(text)

text라는 변수 안에 서버가 응답한 데이터가 들어가있고 이 부분이 호출되게 된다.

 

2 fetch 특징


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

- XMLHttpRequest 객체보다 사용법이 간단하다.

Asynchronous 비동기적으로 작동한다.

- 최근에 추가된 Web API라 IE를 제외한 대부분의 브라우저에서 제공한다.

 

3 fetch API - response 객체


    fetch('javascript').then(function(response){
        // console.log(response.status); //404
        if(response.status='404'){
            alert('파일이 없습니다.');
        }
    });

 

fetch를 통해서 요청했을 때 서버가 응답한 결과를 담고있는 객체,데이터가 response

이 안의 여러가지 속성을 통해서 서버와 통신을 할 때 어떤 상태인지를 알 수 있는 단서들이 들어있다.

 

 

 

fetch 연습 예제

<!doctype html>
<html>
<head>
  <title>WEB1 - Welcome</title>
  <meta charset="utf-8">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
  <script src="colors.js"></script>
</head>
<body>
  <h1><a href="index.html">WEB</a></h1>
  <input id="night_day" type="button" value="night" onclick="
    nightDayHandler(this);
  ">
  <ol>
    <li><a onclick="
    fetch('html').then(function(response){
      response.text().then(function(text){
        document.querySelector('article').innerHTML =text;
      })
    })
      // document.querySelector('article').innerHTML = '<h2>HTML</h2>HTML is....'
      ">HTML</a></li>
    <li><a onclick="
    fetch('css').then(function(response){
      response.text().then(function(text){
        document.querySelector('article').innerHTML = text;
      })
    })
      // document.querySelector('article').innerHTML = '<h2>CSS</h2>CSS is....'
      ">CSS</a></li>
    <li><a onclick="
      document.querySelector('article').innerHTML = '<h2>Javascript</h2>Javascript is....'
      ">Javascript</a></li>
  </ol>
<article></article>
</body>
</html>
<!-- fetch를 통해서 JSON 파일의 원하는 영역만 들고와보고 싶다. -->

리팩토링

<!doctype html>
<html>
<head>
  <title>WEB1 - Welcome</title>
  <meta charset="utf-8">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
  <script src="colors.js"></script>
</head>
<body>
  <h1><a href="index.html">WEB</a></h1>
  <input id="night_day" 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>

중복된 부분들을 fetchPage함수로 만들어서 가독성 좋게 리팩토링 했다.

반응형

'Frontend > JavaScript' 카테고리의 다른 글

[javascript] resize 이벤트  (0) 2021.11.29
[javascript] scroll event  (0) 2021.11.29
[Javascript] 함수  (0) 2021.10.24
[Javascript] Object  (0) 2021.10.12
[Javascript] ES6 모듈(ESM)  (0) 2021.10.11