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

时间:2013-07-27 22:37:09

标签: php jquery ajax

好的我正试图围绕如何将某些东西添加到购物车并让它显示在页面而不重新加载页面。

所以我试着写一些非常简单的东西,这样我就可以理解逻辑是如何工作的并且写得恰当。在我的示例中,我在div的页面中有一个session['cart']和一个下拉列表。

一个选项的值为'red',另一个选项的值为'blue'。当我选择值为'red'的选项时,我希望'red'显示在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 个答案:

答案 0 :(得分:0)

当你没有告诉我们你得到什么错误/警告时,很难说什么不起作用。您应该查看您的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的