使用AJAX删除项目时删除项目时更新购物车

时间:2018-10-14 04:28:29

标签: php jquery ajax

我正在尝试从购物车中删除商品,但是当我单击删除按钮时,该商品不会消失。我想知道发生了什么,并希望有人可以帮助我弄清楚发生了什么。我不会发布一些后端代码,因为我认为它可以正常工作。似乎一切正常,但是当我单击删除按钮时,它不会删除内容。

$(document).ready(function(data){

    load_cart_data();

    function load_cart_data()
        {
            $.ajax({
                url: "model/fetchcart.php",
                method: "POST",
                dataType: "json",
                success: function(data){
                    $('#cart_items').html(data.cart_details);
                    $('.total_price').text(data.total_price);
                    $('.badge').text(data.total_item);
                }
            });
        }

    $('.purchase_add').click(function(){
        var product_id = $(this).attr("id");

        var product_name = $('#name'+product_id).val();

        var product_code = $('#code'+product_id).val();

        var product_price = $('#price'+product_id).val();  

        var product_quantity = $('#quantity'+product_id).val();

        var action = "add";

        if (product_quantity > 0) { // as in the value
            $.ajax({
                url: "model/action1.php",
                method: "POST",
                data: {
                    product_id:product_id,
                    product_name:product_name,
                    product_code:product_code,
                    product_price:product_price,
                    product_quantity:product_quantity,
                    action:action,
                },
                success: function(data) {
                    load_cart_data();
                    alert('Item has been added to cart');
                }
            });
        } else {
            alert('Please enter number of quantity');
        }
    });

        $(document).on('click', '.delete', function(){
        var button = $(this);
        var product_id = $(this).attr("id");
        var action = 'remove';
        if(confirm("Are you sure you want to remove this product")) {
        $.ajax({
            url: "model/action1.php",
            method: "POST",
            data: {
                product_id: product_id,
                action: action
            },
            success: function() 
            {
                load_cart_data();
                button.parents('.shopping_cart_item').fadeOut('fast');
                $('#shopping_cart_item'+product_id).remove();
            }

        })
        } 
        else 
        {
    return false;
    } 
});
});

当我单击删除按钮时,如果使用警报功能,我确实会收到反馈,但该项目不会自行设置。删除功能或fadeOut功能都不会删除内容,并且SESSION不会像看起来那样未设置。

这是我的动作文件的一部分

if($_POST["action"] == 'remove')
 {
  foreach($_SESSION["shopping_cart"] as $keys => $values)
  {
   if($_SESSION["shopping_cart"][$keys]['product_id'] == $_POST["product_id"])
   {
    unset($_SESSION["shopping_cart"][$keys]);
   }
  }
 }

这是从load_cart_data()函数获取的数据

<div class="shopping_cart_item" id="shopping_cart_item'.$values['product_id'].'">

            <div class="shopping_cart_img"><img src="image/'.$values['product_code'].'.jpg"></div>

            <div class="shopping_cart_desc">

                <div class="shopping_cart_delete"><p>ET SPORK<span class="dash"> - </span>PREORDER<span class="dash"> -</span> 31%</p><div class="delete" id='.$values['product_id'].'>x</div></div>


                <p class="finish"><span>Finish:</span> <span>'.$values['product_name'].'</span></p>

                <div class="shopping_cart_number">
                    <input type="text" value='.$values['product_quantity'].'><span>x</span><span>'.$values['product_price'].'</span>
                </div>
            </div>
        </div>

将非常感谢您的帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

您可能可以替换unset方法,因为文档http://php.net/manual/en/function.unset.php说:

  

如果在函数内部未设置全局变量,则仅销毁局部变量。调用环境中的变量将保留与调用unset()之前相同的值。

因此,您可以使用此:

if($_POST["action"] === 'remove')
{
    $cart = $_SESSION["shopping_cart"];
    foreach($cart as $keys => $values)
    {
        if($value['product_id'] === $_POST["product_id"])
        {
            unset($cart[$keys]);
            break;
        }
    }
    $_SESSION["shopping_cart"] = $cart;
}

if($_POST["action"] === 'remove')
{
    foreach($_SESSION["shopping_cart"] as $keys => $values)
    {
        if($value['product_id'] === $_POST["product_id"])
        {
            array_splice($_SESSION["shopping_cart"], $keys, 1);
            break;
        }
    }
}

此示例在文档注释中,用于使用unset删除会话属性,并且register_globals已打开。

unset($GLOBALS[_SESSION][$sessionVariableName]);

$variable = $_SESSION['variable'];
unset( $_SESSION['variable'], $variable );