За последние 24 часа нас посетили 21778 программистов и 1012 роботов. Сейчас ищут 669 программистов ...

Проблема с вводом и отображением на экране товаров из корзины!

Тема в разделе "JavaScript и AJAX", создана пользователем Pavl, 10 авг 2020.

  1. Pavl

    Pavl Новичок

    С нами с:
    3 ноя 2017
    Сообщения:
    44
    Симпатии:
    0
    Добрый день!
    Код работает, за исключением одного момента.
    Есть корзина, куда должен отправляться выбранный товар при нажатии кнопки "Купить".
    Есть, также, мини-корзина со счётчиком количества товара, который отображается на этой же странице в левом верхнем углу. С мини-корзиной проблемы нет, когда нажимаешь "Купить", то счётчик увеличивается.
    Проблема с главной корзиной (cart.html) - при нажатии "Купить" корзина, или не пополняется, или пополняется, но не отображается на экране.
    При нажатии "Купить" на вкладке "Network" в браузере Хром ничего не происходит, не выводится.
    На странице cart.html отображается, только форма для данных покупателя, а сам выбранный товар нет.
    Файл index.html:
    HTML:
    1. <!DOCTYPE html>
    2. <html lang="ru">
    3.     <meta charset="UTF-8">
    4.     <title>autoshop</title>
    5.     <link rel="stylesheet" href="css/style.css">
    6. </head>
    7.  
    8. <!--<div class="cart">-->
    9.     <!--<p class="name">Цветы</p>-->
    10.     <!--<img src="images/grape.png" alt="">-->
    11.     <!--<div class="cost">500</div>-->
    12.     <!--<button class="add-to-cart">Купить</button>-->
    13. <!--</div>-->
    14.  
    15. <main>
    16.     <a href="cart.html">Корзина</a>
    17.     <div class="mini-cart"></div>
    18.     <!--<a href="later.html">Желания</a>-->
    19.     <div class="goods-out"></div>
    20. </main>
    21.  
    22. <script src="js/jquery-3.5.1.min.js"></script>
    23. <script src="js/main.js"></script>
    24. </body>
    25. </html>
    Файл main.js:
    Код (Javascript):
    1. var cart = {}; // корзина
    2.  
    3. function init() {
    4.     //вычитуем файл goods.json
    5.     //$.getJSON("goods.json", goodsOut);
    6.     $.post(
    7.         "admin/core.php",
    8.         {
    9.             "action" : "loadGoods"
    10.         },
    11.         goodsOut
    12.     );
    13. }
    14.  
    15. function goodsOut(data) {
    16.      // вывод на страницу
    17.      data = JSON.parse(data);
    18.      console.log(data);
    19.      var out='';
    20.      for (var key in data) {
    21.          // out +='<div class="cart">';
    22.          // out +='<p class="name">'+data[key].name+'</p>';
    23.          // out += '<img src="images/'+data[key].img+'" alt="">';
    24.          // out +='<div class="cost">'+data[key].cost+'</div>';
    25.          // out +='<button class="add-to-cart">Купить</button>';
    26.          // out +='</div>';
    27.          //---------
    28.          out +='<div class="cart">';
    29.          //out +=`<button class="later" data-id="${key}">&hearts;</button>`;
    30.          out +=`<p class="name"><a href="goods.html#${key}">${data[key].name}</a></p>`;
    31.          //out +=`<img src="images/${data[key].img}" alt="">`;
    32.          out +=`<div class="cost">${data[key].cost}</div>`;
    33.          out +=`<button class="add-to-cart" data-id="${key}">Купить</button>`;
    34.          out +='</div>';
    35.      }
    36.      $('.goods-out').html(out);
    37.      $('.add-to-cart').on('click', addToCart);
    38.      $('.later').on('click', addToLater);
    39. }
    40.  
    41. function addToLater() {
    42.     //добавляем товар в "желания"
    43.     var later = {};
    44.     if (localStorage.getItem('later')) {
    45.         // если есть - расшифровываю и записываю в переменную cart
    46.         later = JSON.parse(localStorage.getItem('later'));
    47.     }
    48.     alert('Добавлено в Желания');
    49.     var id = $(this).attr('data-id');
    50.     later[id] = 1;
    51.     localStorage.setItem('later', JSON.stringify(later)); //корзину в строку
    52. }
    53.  
    54. function addToCart() {
    55.     //добавляем товар в корзину
    56.     var id = $(this).attr('data-id');
    57.     // console.log(id);
    58.     if (cart[id]==undefined) {
    59.         cart[id] = 1; //если в корзине нет товара - делаем равным 1
    60.     }
    61.     else {
    62.         cart[id]++; //если такой товар есть - увеличиваю на единицу
    63.     }
    64.     showMiniCart();
    65.     saveCart();
    66. }
    67.  
    68. function saveCart() {
    69.     //сохраняю корзину в localStorage
    70.     localStorage.setItem('cart', JSON.stringify(cart)); //корзину в строку
    71. }
    72.  
    73. function showMiniCart() {
    74.     //показываю мини корзину
    75.     var out="";
    76.     for (var key in cart) {
    77.         out += key +' --- '+ cart[key]+'<br>';
    78.     }
    79.     $('.mini-cart').html(out);
    80. }
    81.  
    82. function loadCart() {
    83.     //проверяю есть ли в localStorage запись cart
    84.     if (localStorage.getItem('cart')) {
    85.         // если есть - расширфровываю и записываю в переменную cart
    86.         cart = JSON.parse(localStorage.getItem('cart'));
    87.         showMiniCart();
    88.     }
    89. }
    90.  
    91. $(document).ready(function () {
    92.     init();
    93.     loadCart();
    94. });
    Файл cart.html(главная корзина):
    HTML:
    1. <!DOCTYPE html>
    2. <html lang="en">
    3.     <meta charset="UTF-8">
    4.     <title>Title</title>
    5.     <link rel="stylesheet" href="css/style.css">
    6. </head>
    7. <main>
    8.     <div class="main-cart"></div>
    9.     <div class="email-field">
    10.         <p>Имя: <input type="text" id="ename"></p>
    11.         <p>Email: <input type="text" id="email"></p>
    12.         <p>Телефон: <input type="text" id="ephone"></p>
    13.         <p><button class="send-email">Заказать</button></p>
    14.     </div>
    15. </main>
    16. <script src="js/jquery-3.5.1.min.js"></script>
    17. <script src="js/cart.js"></script>
    18. </body>
    19. </html>
    Файл cart.js:
    Код (Javascript):
    1. var cart = {};
    2. function loadCart() {
    3.     //проверяю есть ли в localStorage запись cart
    4.     if (localStorage.getItem('cart')) {
    5.         // если есть - расширфровываю и записываю в переменную cart
    6.         cart = JSON.parse(localStorage.getItem('cart'));
    7.             showCart();
    8.         }
    9.     else {
    10.         $('.main-cart').html('Корзина пуста!');
    11.     }
    12. }
    13.  
    14. function showCart() {
    15.     //вывод корзины
    16.     if (!isEmpty(cart)) {
    17.         $('.main-cart').html('Корзина пуста!');
    18.     }
    19.     else {
    20.         $.getJSON('goods.json', function (data) {
    21.             var goods = data;
    22.             var out = '';
    23.             for (var id in cart) {
    24.                 out += `<button data-id="${id}" class="del-goods">x</button>`;
    25.                 //out += `<img src="images\\${goods[id].img}">`;
    26.                 out += ` ${goods[id].name  }`;
    27.                 out += `  <button data-id="${id}" class="minus-goods">-</button>  `;
    28.                 out += ` ${cart[id]}  `;
    29.                 out += `  <button data-id="${id}" class="plus-goods">+</button>  `;
    30.                 out += cart[id]*goods[id].cost;
    31.                 out += '<br>';
    32.             }
    33.             $('.main-cart').html(out);
    34.             $('.del-goods').on('click', delGoods);
    35.             $('.plus-goods').on('click', plusGoods);
    36.             $('.minus-goods').on('click', minusGoods);
    37.         });
    38.     }
    39. }
    40.  
    41. function delGoods() {
    42.     //удаляем товар из корзины
    43.     var id = $(this).attr('data-id');
    44.     delete cart[id];
    45.     saveCart();
    46.     showCart();
    47. }
    48. function plusGoods() {
    49.     //добавляет товар в корзине
    50.     var id = $(this).attr('data-id');
    51.     cart[id]++;
    52.     saveCart();
    53.     showCart();
    54. }
    55. function minusGoods() {
    56.     //уменьшаем товар в корзине
    57.     var id = $(this).attr('data-id');
    58.     if (cart[id]==1) {
    59.         delete cart[id];
    60.     }
    61.     else {
    62.         cart[id]--;
    63.     }
    64.     saveCart();
    65.     showCart();
    66. }
    67.  
    68. function saveCart() {
    69.     //сохраняю корзину в localStorage
    70.     localStorage.setItem('cart', JSON.stringify(cart)); //корзину в строку
    71. }
    72.  
    73. function isEmpty(object) {
    74.     //проверка корзины на пустоту
    75.     for (var key in object)
    76.     if (object.hasOwnProperty(key)) return true;
    77.     return false;
    78. }
    79.  
    80. function sendEmail() {
    81.     var ename = $('#ename').val();
    82.     var email = $('#email').val();
    83.     var ephone = $('#ephone').val();
    84.     if (ename!='' && email!='' && ephone!='') {
    85.         if (isEmpty(cart)) {
    86.             $.post(
    87.                 "core/mail.php",
    88.                 {
    89.                     "ename" : ename,
    90.                     "email" : email,
    91.                     "ephone" : ephone,
    92.                     "cart" : cart
    93.                 },
    94.                 function(data){
    95.                     if (data==1) {
    96.                         alert('Заказ отправлен');
    97.                     }
    98.                     else {
    99.                         alert('Повторите заказ');
    100.                     }
    101.                 }
    102.             );
    103.         }
    104.         else {
    105.             alert('Корзина пуста');
    106.         }
    107.     }
    108.     else {
    109.         alert('Заполните поля');
    110.     }
    111.  
    112. }
    113.  
    114.  
    115. $(document).ready(function () {
    116.    loadCart();
    117.    $('.send-email').on('click', sendEmail); // отправить письмо с заказом
    118. });
    Хотел ещё файл function.php выложить. Там подключения к БД, но, из-за ограничений по количеству символов не получилось. Может, в следующем сообщении выложу, если это необходимо.
    Надеюсь на Вашу помощь.
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    отрицание того что пусто, ! Уберите
     
    Pavl нравится это.
  3. Pavl

    Pavl Новичок

    С нами с:
    3 ноя 2017
    Сообщения:
    44
    Симпатии:
    0
    В функции showCart() убрал ! , там где isEmpty. Теперь появляется "Корзина пуста!", хотя в мини-корзине отображается добавление товара.
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    Значит верните )))
    Ну посмотрите через консоль или по f12 что там в локалсторадже итд
     
    Pavl нравится это.
  5. Pavl

    Pavl Новичок

    С нами с:
    3 ноя 2017
    Сообщения:
    44
    Симпатии:
    0
    Ну посмотрел! Только бы ещё, как бы понять, что я там увидел.
    Указание на строку № 26 в файле cart.js:
    Код (Text):
    1. out += ` ${goods[id].name  }`;
    При наведении на крестик появляется:
    Uncaught TypeError: Cannot read property 'name' of undefined
    Что не так с этой строкой?
    Гуглю, конечно, но пока не доходит.
     

    Вложения: