5

わかりました、カートに何かを追加し、ページをリロードせずにページに表示する方法に頭を悩ませようとしています。

そのため、ロジックがどのように機能し、適切に記述されているかについて頭を悩ませることができるように、非常に単純なものを記述しようとしました。私の例ではdiv、ページにsession['cart']ドロップダウンがあります。

1 つのオプションの値は「red」で、もう 1 つのオプションの値は「blue」です。「赤」の値でオプションを選択すると、「赤」が の body タグの直後にある div に表示されsession['cart']ます。「青」の値でオプションを選択すると、「青」が に表示されsession['cart']ます。

ajaxというページへの投稿を通じてこれを実行しようとしています'cart_update.php'。私はこの 1 週間、より高度なモデルに取り組んできましたが、実際に何が起こっているのかを本当に理解し、学ぶことができるように、簡単なことを書くのは良い考えだと思いました。どんな助けでも本当に感謝しています!

ここに私のコードがあり、私はその方法を知っています。私はただ学ぼうとしています。

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;
}
?>
4

1 に答える 1

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/ 2 つ目は、データを送信するときに 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には、色が定義されたいくつかのフォームを持つ非表示のフィールドがあります。そのアプローチの代わりに、1 つのフォーム内に選択リストを作成して、色の値を簡単に取得できるようにし、色ごとに新しいフォームを作成する必要がないようにします。

このようなもの:

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

次に、js で、次のようにして色の選択を取得できます。

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

ajax 呼び出しが完了したときに応答値を取得するには、done() コールバックを使用します。return-type を割り当てることもお勧めします。

$(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 データをデコードする必要があります。

<?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'] は js から php に json 形式で送信されたため、既に json 形式になっています。

于 2013-07-27T22:58:48.360 に答える