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