我如何获取更新的购物车会话数组并将其显示在另一个php文件AJAX中 [英] How can i get the updated cart session array and display it in another php file AJAX

查看:70
本文介绍了我如何获取更新的购物车会话数组并将其显示在另一个php文件AJAX中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

AJAX

$(document).ready(function(){
//remove product from cart
                $(".delete-product-cart").click(function(e){

             var id = $(this).data('id');
             $.ajax({
                 url: "remove_from_cart.php",
                 type: "GET", //send it through get method
                 data: {
                     id: id,
                 },
                 success: function(response) {


                 },
                 error: function(xhr) {
                     //Do Something to handle error
                 }
             });

                });
});

//remove_from_cart.php

<?php
// start session
session_start();

// get the product id
$id = isset($_GET['id']) ? $_GET['id'] : "";


// remove the item from the array
unset($_SESSION['cart'][$id]);
?>

//然后我有了cart.php,在这里我按一下按钮即可在while循环中删除产品 FOREACH中的会话购物车对于不重新加载页面即可更新产品很重要猜测.那么,如何在不重新加载cart.php的情况下更新此会话购物车?

// Then i have the cart.php where i press the button to delete a product in a while loop The session cart inside the FOREACH is what's important to update the product WITHOUT reloading the page i guess. So how will THIS session cart will be updated without cart.php reloading??


if(count($_SESSION['cart'])>0){

    // get the product ids
    $ids = array();
    foreach($_SESSION['cart'] as $id=>$value){
        array_push($ids, $id);
    }

    $stmt=$product->readByIds($ids);


    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {

product with ID here

    }
}

推荐答案

我认为这会对您有所帮助.我曾经用过自己的代码. 有很多改进之处,但是我想这是您的学习项目

I think this will help you. I used as manny of your own code. There are many points of improvements but i guess this is a learning project of yours

<?php
/**
 * remove_from_cart.php
 */
// Test if the script gets loaded by a POST request
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['id'])) {

  session_start();
  $id = (int)$_POST['id'];
  // remove the item from the array
  unset($_SESSION['cart'][$id]);

}


/**
 * cart.php
 */
if (isset($_SESSION['cart']) && count($_SESSION['cart']) > 0) {

  // get the product ids
  // Wy do this? your session is already an array with the ids
  $ids = array();
  // And here you add the key of the array to ids and not the product_id so you will get the wrong products
  foreach ($_SESSION['cart'] as $id => $value) {
    array_push($ids, $id);
  }

  $stmt = $product->readByIds($_SESSION['cart']); // Instead of $ids you can add the session

  // this works, but add your fetch in your readByIds method to keep your code cleaner and return the array with products
  while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    ?>
    <div class="product-row">
      <p><?= $row['product_name'];?></p>
      <p><?= $row['product_price'];?></p>
      <button type="button" class="delete-product-cart" data-id="<? $row['product_id']; ?>">Remove</button>
    </div>
    <?php

  }
} else {
  // Cart session doesnt exist or is empty
  // Let the user know the his cart is empty
}
?>

<script>
  $(function () {
    // Remove product from cart
    $(".delete-product-cart").click(function (e) {
      var
        button = $(this),
        product_id = button.data('id');

      $.ajax({
        url: "remove_from_cart.php",
        type: "POST",
        data: {
          id: product_id,
        },
        beforeSend: function() {
          // Disable the button, to prevent duplicate request
          button.attr('disabled', 'disabled');
        },
        success: function (data) { // Response data is not used now
          button.parent().fadeOut(300, function () {
            button.remove();
          });
        },
        complete: function() {
          // Make the button enabled again, for when the delete function didnt work the button can be pressed again
          button.removeAttr('disabled');
        }
        error: function () {
          //Do Something to handle error
        }
      });
    });

  });

</script>

这篇关于我如何获取更新的购物车会话数组并将其显示在另一个php文件AJAX中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆