值不是通过ajax将会话数组更新为json数组

时间:2013-03-11 08:27:54

标签: php ajax arrays json

我有一个会话数组 $ _ 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更新此值,然后去查看数量,它正在改变。为什么会这样?

请帮助!!!

1 个答案:

答案 0 :(得分: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>