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的情况下更新此会话购物车?
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 } }
我认为这会对您有所帮助。我曾经用过自己的代码。有很多改进之处,但我想这是您的学习项目
<?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>