javascript_series5_ajax

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;
      render();
    })
}

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>
              <button id="detail" class="btn btn-primary" data-id="${item.id}">Details</button>
            </div>
          </div>
        </li>
    `;
  })
  list.innerHTML = str;
}


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

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 panel
list.addEventListener('click', event => {
  if (event.target.matches('.btn-primary')) {
    showAlert(event.target.dataset.id)
  }
})