ajax使用php和session添加到购物车

时间:2018-06-21 12:01:46

标签: php ajax

PHP Ajax add to cart not working中类似,我的添加到购物车也无法正常工作。我正在尝试在<div id="mycart"> here </div>中显示添加的产品名称,价格,数量和总价,但是它不起作用,并且在控制台中没有出现任何错误。起作用的东西:

  • 我收到成功警报:产品已添加到购物车 但它没有显示在我的div中。

有人可以告诉我我在做什么错吗?

我在products.php上的表单

<form class="form-item" method="post" action="?action=add&id=<?php echo $row["id"]; ?>"> 
bla bla input
<input type="submit" name="add_to_cart" class="btn btn-outline-secondary btn-sm" value="Add to cart">

我的ajax.js

<script>
$('.form-item').on('submit', function() {

    var id = $(this).attr("id");
    var titel = $('#titel' + id).val();
    var price = $('#price' + id).val();
    var quantity = $('#quantity' + id).val();

$.ajax({
           url:"cart-process.php",
           method:"POST",
           dataType:"json",
           data:{
              id:id,
              titel:titel,
              price:price,
              quantity:quantity,
            },
            success:function(data)
            {
             $('#mycart').html(data);
             alert("Product has been added to cart");
            }
        });
    return false;
});
</script>

和我的cart-process.php

<?php   
session_start();

if(!empty($_SESSION['shopping_cart'])){  
    $total = 0;  

    foreach($_SESSION['shopping_cart'] as $key => $row){ 

    $output .='<a href="?action=delete&id='.$row['id'].'" class="action-icon close-shopping-cart-box"><i class="ti ti-close"></i></a>';
    $output .='<span>'.$row['titel'].'</span><span class="text-muted"> x '.$row['quantity'].'</span><br /> ';


    $total = $total + ($row['quantity'] * $row['prijs']);  
    }  

    $output.='<br />Totaal:&euro; '.number_format($total, 2).'';



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

    $output.='<a href="checkout-cash" style="margin-top:20px;" class="btn btn-outline-warning">Cash payment</a>';
    $output.='<a href="checkout-paypal" style="margin-top:20px;" class="btn btn-outline-warning">Paypal payment</a>';

 }}

}

echo json_encode($output);
?>

2 个答案:

答案 0 :(得分:1)

您需要进行两项更改,首先,告诉ajax函数您希望接收html响应:

$.ajax({
  url:"cart-process.php",
  method:"POST",
  dataType:"html",
  ...

第二,不要尝试对PHP输出进行json编码,它不是 json:

echo $output; // not json_encode($output);

答案 1 :(得分:0)

我认为可能是3个问题

Ajax呼叫

$.ajax({
       url:"cart-process.php",   // script location
       method:"POST",            // if you use post, then get the values from $_POST
       //dataType:"json", NO NEED
       data:{
          id:id,                 // this is how the array will be read
          titel:titel,
          price:price,
          quantity:quantity,
        },
        success:function(data)          //success call
        {
         $('#mycart').html(data);        
         alert("Product has been added to cart");  // even if no data is returned 
                                                   //alert will be shown
        }
    });
return false;

您正在使用ajax / js脚本发布

必须从服务器端的$_POST array获取变量,但是在服务器端,当您向图表中添加新产品时,我看不到。

如果要将新产品保存到会话中

//as the var names on your js script will be preserved on php side
// you can just add it, if you dont needd to process this info
$_SESSION["shoping_cart"][] = $_POST;
//Now you use a loop to build the html

这是第三个问题显示的地方,您的ajax调用需要JSON响应,而php json_encoding则是html响应?不需要,只需echo $html;并在成功调用后在您的js data = $html上,然后将html添加到元素

$("#elementid .orclass").html(data)

希望我的回答对您有所帮助。