非常简单的 ajax 添加到购物车

Posted

技术标签:

【中文标题】非常简单的 ajax 添加到购物车【英文标题】:Very simple ajax add to cart 【发布时间】:2013-07-28 00:13:52 【问题描述】:

好的,我正在努力思考如何将一些东西添加到购物车并让它在页面中显示而无需重新加载页面。

所以我试着写一些非常简单的东西,这样我就可以了解逻辑的工作原理和正确编写的方式。在我的示例中,我在 session['cart'] 的页面中有一个 div 和一个下拉菜单。

一个值为“red”的选项和另一个值为“blue”的选项。当我选择值为“红色”的选项时,我希望“红色”显示在位于session['cart'] 中的正文标记之后的 div 中。当我选择值为“蓝色”的选项时,我希望“蓝色”显示在session['cart'] 中。

我正在尝试通过将ajax 发布到名为'cart_update.php' 的页面来执行此操作。我已经为这个更高级的模型苦苦挣扎了一周,我认为写一些简单的东西是个好主意,这样我就可以真正理解和了解真正发生的事情。非常感谢任何帮助!

这是我的代码,我知道它的出路。我只是在努力学习。

index.php

        <?php session_start(); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<style type="text/css">
body 
    margin-top: 200px;

</style>
</head>

<body>
<div align="left" style="display:block;width:200px;height:200px;background:#ccc;border:solid 1px #009966;">Color Chosen<br /><?php echo $_SESSION['cart']; ?></div>

<div align="center"><form method="post" action="">
<select id="color-selection">
<option value="red">Red</option>
<option value="blue">Blue</option>
</select>
</div>
<script type="text/javascript">
$(document).ready(function()
    $("#color-selection").on("change", function(event)
        var color = $("#color-selection").val();
        var add = "add";
        var dataString = color: color, type: add; //JSON-formatted string
        $.ajax(  
            type: "POST",  
            url: "cart_update.php",  
            data: dataString
        );
    );
);
</script>

</body>
</html>

这是我的 cart_update.php

<?php
session_start();
$type = json_decode($_POST['type']);
if(isset($_POST["type"]) && $_POST["type"]== $type)

    $color = json_decode($_POST['color']);   
    $_SESSION['cart'] = $color;

?>

【问题讨论】:

什么不起作用?你想达到什么目的?对于 1,您永远不会在任何地方设置变量 color 什么都没有发生...我还添加了 + "type=" + add;到数据字符串 你能把你的问题改成你所拥有的吗?这使它更容易。在您现在拥有的代码中,color 没有任何值,因为您从未设置它。 我会改变它,但它不会让我 无论如何.. 您需要将变量 colortype 设置为 $(this).closest('form').find('input[name="type"]').val(); 之类的类型。并为您的 'color' 变量替换 'type' 为 'color'。您需要在单击事件处理程序中设置它们。 【参考方案1】:

如果您不告诉我们您收到了哪些错误/警告,就很难判断哪些地方不起作用。您应该查看您的 js-console(使用 firebug 或其他调试工具)

不过,看看你的代码,我看到了一些东西..

$(document).ready(function()
    $(".add_to_cart").onClick(function()
         var dataString = "color=" + color;
          $.ajax(  
          type: "POST",  
          url: "cart_update.php",  
          data: dataString
          );
    );
);

onClick 在这种情况下不起作用。请改用on()。 http://api.jquery.com/on/ 第二件事是发送数据时应该使用 JSON 格式的字符串。

$(document).ready(function()
    $(".add_to_cart").on("click", function(event)
        var dataString = color: color; //JSON-formatted string
        $.ajax(  
            type: "POST",  
            url: "cart_update.php",  
            data: dataString
        );
    );
);

在您的 html 中,您有多个带有已定义颜色的表单的隐藏字段。而不是那种方法,我会在一个表单中创建一个选择列表,这样可以很容易地获取颜色的值,并且您不必为每种颜色创建一个新表单。

类似这样的:

<select id="color-selection">
<option value="red">Red</option>
<option value="blue">Blue</option>
</select>

然后在您的 js 中,您可以通过执行以下操作来选择颜色:

color = $("#color-selection").val();

要在 ajax 调用完成时获取响应值,然后使用 done()-callback。分配返回类型也是一个好习惯。

$(document).ready(function()
    $(".add_to_cart").on("click", function(event)
        color = $("#color-selection").val();
        var dataString = color: color; //JSON-formatted string
        $.ajax(  
            type: "POST",  
            url: "cart_update.php",  
            data: dataString,
            dataType: "json" //This indicates the expected return-type
        ).done(function(data) 
                $("#thecoloris").html(data.color); //response from php. Set the color in the div id="thecolorid"
       ); 

    );
);

在您的 php 代码中,您必须解码 json-data:

<?php
session_start();
if(isset($_POST["type"]) && $_POST["type"]=='add')

    $color = json_decode($_POST['color']);   
    $_SESSION['cart'] = $color;

echo $_POST['color']; //Output color (that is sent to this php through ajax) - This acts as the return value data in the ajax-function done()
?>

通常输出的值应该使用 json_encode($variable) 以 json 格式编码,但在这种情况下 $_POST['color'] 已经是 json 格式,因为它是以 json 格式从 js 发送到 php .

【讨论】:

好的,我将 $(".add_to_cart").on("click", function(event) 更改为 $("#color-selection").on("click", function(event) ) 并在上面使用了您的代码,但仍然没有。我正在使用 firebug 没有错误,并且帖子成功到 cart_update.php @smitty - 你想发生什么?它唯一应该做的就是在用户点击提交时将会话“购物车”设置为选定的颜色。 感谢您的帮助。我刚刚根据您的建议对当前代码进行了上面的编辑。我想要发生的是字符串“red”来显示 在 index.php 或蓝色中显示我是否选择蓝色。 @smitty - 所以基本上,如果用户选择了一种特定的颜色,你想设置一个会话,然后在页面的哪个位置显示为用户选择的颜色? 是的,完全正确...我只是想做一些简单的事情,以便弄清楚它是如何工作的。我希望逻辑是 php,jquery 发布到 ajax 并在同一页面上显示更改。

以上是关于非常简单的 ajax 添加到购物车的主要内容,如果未能解决你的问题,请参考以下文章

将产品添加到购物车 jQuery/Ajax/Symfony/Twig

在 Woocommerce 中的产品自定义循环上启用 Ajax 添加到购物车按钮

用于 WooCommerce 3 中产品变化的 Ajax 添加到购物车按钮

ajax 上的 JS 警报添加到购物车以获取 Woocommerce 中的特定产品类别计数

AJAX 添加到购物车按钮不适用于自定义查询循环产品 woocommerce

WooCommerce 产品循环中添加 Ajax 选项的复选框添加到购物车