javascript_series5_ajax_http

by aelgy369

HTML

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Ajax practice</title>
  <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
</head>

<body>
  <div id="id"></div>
  <div id="category"></div>
  <div id="description"></div>
  <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 id="list" class="row list-unstyled">
          <!-- <li class="col-md-4 col-lg-3 mb-3">
            <div class="card text-bg-light h-100">
              <img class="object-fit-contain h-50" src="https://fakestoreapi.com/img/81fPKd-2AYL._AC_SL1500_.jpg">
              <div class="card-body d-flex flex-column">
                <h5 class="card-title flex-grow-1 mt-5">Fjallraven - Foldsack No. 1 Backpack, Fits 15 Laptops</h5>
                <button id="detail" class="btn btn-primary" data-id="1" data-bs-toggle="modal" data-bs-target="#exampleModal">Details</button>
              </div>
            </div>
          </li> -->
        </ul>
      </div>
    </div>
  </div>

  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
</body>

JavaScript

const list = document.querySelector('#list')
const url = 'https://fakestoreapi.com/products'
let a = [];

function loadProduct() {
  fetch(url)
    .then(res => {
      return res.json()
    })
    .then(json => {
      a = json;
      // 做 load Products 開關
      if (list.firstElementChild) {
        list.innerHTML = '';
      } else {
        render();
      }
    })
    .catch(error => {
      const itemId = document.querySelector('#id');
      const errorMessage = document.createElement('div')
      errorMessage.innerHTML = [
        `<div class="alert alert-danger alert-dismissible" role="alert">`,
        `   <div>抱歉,請稍後重新嘗試。</div>`,
        '   <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>',
        '</div>'
      ].join('')

      itemId.append(errorMessage)
    })
}

function render() {
  let str = "";
  a.forEach((item) => {
    str += `
        <li class="col-md-4 col-lg-3 mb-3">
          <div class="card text-bg-light h-100">
            <img class="object-fit-contain h-50" src="${item.image}">
            <div class="card-body d-flex flex-column">
              <h5 class="card-title flex-grow-1 mt-5">${item.title}</h5>
              <div class="container">
                <div class="row">
                  <button id="detail" class="btn btn-primary col-5" data-id="${item.id}">Details</button>
                  <div class="col"></div>
                  <button id="delete" class="btn btn-danger col-5" data-id="${item.id}">Delete</button>
                </div>
              </div>
            </div>
          </div>
        </li>
    `;
  })
  list.innerHTML = str;
}


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

// show Alert function
function showAlert(id) {
  fetch(url + "/" + id)
    .then(res => {
      return res.json()
    })
    .then(json => {
      a = json;
      alert(a.id);
      alert(a.category);
      alert(a.description);
    })
}

// listen to data...