3

セッション配列$_SESSION['Cartquantity'] があります。200 行目の php ファイルでは、この配列を変数$QtyArrayに格納しています。

$QtyArray = $_SESSION['Cartquantity'] ;

次に、配列をjsonでエンコードして、jsファイルで使用します

echo "var cartQty = " . json_encode($QtyArray) . ";" ; (on line 201)

今、AJAXを介して、同じ方法で 120 行目のセッション配列を更新しています

$QtyArray = $_SESSION['Cartquantity'] ;                (on line 120)
echo "var cartQty = " . json_encode($QtyArray) . ";" ; (on line 121)

これは、ファイルを呼び出すための私のJavaScriptコードです

$.ajax({
                    url:'index.php',
                    cache:false,
                    datatype:'json',
                    data:{ q: "add_card", item_id: id, item_qty: qty,stop:'1' },
                    success:function(data){
                        $("#cart_quanity").html(parseFloat($("#cart_quanity").html()))
                    }
                });
        return false ;  

firebugのコンソールでこれを見ることができるので、配列は明らかに更新されています。しかし、jsファイルでこの値を取得しているとき、値は変化しません。この値を ajax 経由で更新するページをリロードしてから、数量を表示すると、変更されます。なぜそれが起こっているのですか?

助けてください!!!

4

1 に答える 1

0

ajaxリクエストのサーバー側ハンドラーは、データリテラル自体を返す必要があります。
クライアントでそのデータを解析し、そこで処理します。「完全な」JavaScriptスニペットとしてではなく、データオブジェクトとして処理します。JQueryは解析部分であなたをサポートします。応答のタイプを自動推測するか、$。ajaxまたは$.postを呼び出すときに定義します。

$.post(url, data, function(response) {
  // you cann assume response to be an object 
  // containing the data from the json-response of the server
}, "json");

自己完結型の例(何も役に立たない):

<?php
if ( isset($_POST['foo']) ) {
    // the client requests a new item
    $rv = array(
      'status'=>'ok',
      'value'=>rand(1,10)
    );
    header('Content-type: application/json');
    echo json_encode($rv);
    die;    
}
?>
<html>
    <head>
        <title>...</title>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
        <script>
            $(document).ready(function() {
                var total = 0;
                $(".foo").on("click", function() {
                    $.post("?", { foo: true }, function(data) {
                        if ( data.status && "ok"==data.status ) {
                            var newValue = data.value;
                            total += newValue;
                            $("#output").append("+ "+newValue+" = "+total+"<br />");
                        }
                    }, "json");
                });
            });
        </script>
    </head>
    <body>
        <button class="foo">click</button>
        <div id="output">0<br /></div>
    </body>
</html>
于 2013-03-11T14:55:26.980 に答える