본문 바로가기
Web/JavaScript

JS#1. Json 파일 fetch로 동적으로 받아오고 화면에 출력하기

by Jun_N 2020. 8. 24.

 

Json 파일 동적으로 받아와서 출력 해보겠다.

 

먼저 Json 파일의 형식은 다음과 같다.

data폴더 안에 있는 data.json

{
  "items": [
    {
      "type": "tshirt",
      "gender": "female",
      "size": "large",
      "color": "pink",
      "image": "../img/pink_t.png"
    },
    {
      "type": "pants",
      "gender": "male",
      "size": "small",
      "color": "blue",
      "image": "../img/blue_p.png"
    },
    {
      "type": "pants",
      "gender": "male",
      "size": "large",
      "color": "yellow",
      "image": "../img/yellow_p.png"
    }
   ]
  }

 

main.js에서 먼저 item을 동적으로 받기 위해 loadItem이라는 함수를 만들었다.

function loadItems() {
  return fetch("data/data.json")
    .then((response) => response.json())
    .then((json) => json.items);
}

//아이템 동적으로 받아오기
loadItems().then((items) => {
  console.log(items);
});

 

fetch 를 통해 해당하는 파일의 경로를 통해 data.json에 쉽게 접근할 수 있다.

.then을 통해 성공적으로 받아오면 response를 얻을 수 있다.

response를 출력해 보면 다음과 같은 정보들을 얻을 수 있다.

여기서 .json 형태로 변환하기 위해 response.json()을 하면 json 형태로 변환된다.

 

여기서 전체 json을 return하지 않고 json에 있는 items만 받아오기 위해 json.items을 사용한다.

이렇게 받은 items을 사용하여 화면에 출력해 보겠다.

 

loadItems().then((items) => {
  console.log(items);
  displayItems(items); // 화면에 출력.
});

displayItems 함수를 선언하여 화면에 출력할 것이다.

 

//받아온 items를 display 화면에 보여주기
function displayItems(items) {
  const container = document.querySelector(".items");
  container.innerHTML = items.map((item) => createHTMLString(item)).join(""); // join을 해서 붙여줘야함
}

//items object를 HTML li형태로 리턴
function createHTMLString(item) {
  return `
  <li class="item">
        <img src="${item.image}" alt="${item.type}" class="item__thumbnail" />
        <span class="item__description">${item.gender}, ${item.size}</span>
  </li>`;
}

먼저 HTML에 ul로 items를 만들어 주고 main.js에서 querySelector로 받아와 container에 저장한다.

 그 후 , innerHTML 을 사용해 추가해 주는데 items에 map을 이용하여 넣어준다.

items object를 html 형태로 넣어주기 위해 createHTMLString 함수를 선언하고 li형태로 return 받은 후 join 을 사용해 붙여준다.

 

그러면 HTML class가 items인 ul 태그 안에 li 태그들이 추가되면서 화면에 보여지게 된다.

 

 

#참고

https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch

 

Using Fetch

This kind of functionality was previously achieved using XMLHttpRequest. Fetch provides a better alternative that can be easily used by other technologies such as Service Workers. Fetch also provides a single logical place to define other HTTP-related conc

developer.mozilla.org

https://academy.dream-coding.com/courses/mini-shopping 

 

쇼핑몰 미니게임 클론코딩 & 코드 리뷰

프론트엔드 필수 브라우저 101 듣고나서 배운거 복습하는 기분으로 들었는데 역시나 정말 만족스러운 강의였습니다. 저 필수 브라우저 강의를 듣지 않았더라도 꼭 한번 들어보기를 추천하네요.

academy.dream-coding.com

 

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

#3 JavaScript 코드 품질  (0) 2020.12.31
#2 JavaScript 코어 기본 정리.  (0) 2020.12.27