javascript_series5_ajax_2

by aelgy369

HTML

<html>

  <head>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
  </head>

  <body>
    <div class="container d-flex justify-content-center mt-5">
      <div class="card w-100">
        <div>
          <button id='btn' class="btn btn-primary mt-2 ms-2">Load Products</button>
        </div>
        <hr>
        <div class="card-body">
          <ul class="row list-unstyled">
          </ul>
        </div>
      </div>
    </div>
  </body>


</html>

JavaScript

const list = document.querySelector('.row')

function loadProduct() {
  fetch('https://fakestoreapi.com/products')
    .then(res => res.json())
    .then(json => {
      // 要做一個 for 迴圈
      json.forEach((data) => {
        loadData(data)
      })
    })
    .catch((error) => {
      alert("抱歉,請稍後重新嘗試。");
    });
}

function loadData(data) {
  const li = document.createElement('li');
  const card = document.createElement('div');
  const image = document.createElement('img');
  const cardBody = document.createElement('div')
  const cardTitle = document.createElement('h5');
  const cardDetail = document.createElement('button');
  li.className = "col-md-4 col-lg-3 mb-3";
  card.className = "card text-bg-light h-100";
  image.className = "object-fit-contain h-50";
  cardBody.className = 'card-body d-flex flex-column';
  cardTitle.className = 'card-title flex-grow-1 mt-5';
  cardDetail.className = 'btn btn-primary';
  image.setAttribute('src', data.image);
  list.append(li);
  li.append(card);
  card.append(image, cardBody);
  cardBody.append(cardTitle, cardDetail);
  cardTitle.textContent = data.title;
  cardDetail.textContent = "detail";
  cardDetail.onclick = () => {
  	alert(data.id);
    alert(data.category);
    alert(data.description);
  }
}

const btn = document.querySelector('#btn');
btn.onclick = loadProduct;