我正在尝试通过AJAX调用通过PHP / mySQL更新我的自定义购物车。我试图以JSON格式接收响应,但PHP脚本似乎返回一个空数组。
以下是脚本:
AJAX部分
//update cart
url_cart="http://localhost/all/anm2/cart_queries.php?id=" + id + "&qty=" + qty + "&ses=" + ses;
$('#refresh_cart').css('display','block');
$.ajax({
type: 'GET',
url: url_cart,
dataType: 'json',
success: function (json) {
$("#cart_items").empty();
$.each(json.cart_items, function(i, dat) {
$("#cart_items").append('<li>' + dat.pd_name + ' ' + dat.cart_qty + ' ' + dat.pd_general_price + '</li>');
});
$('#refresh_cart').css('display','none');
}
});
PHP部分
<?php
$arr = array();
$id=(isset($_GET['id']) && $_GET['id'] != '') ? $_GET['id'] : '';
$ses=(isset($_GET['ses']) && $_GET['ses'] != '') ? $_GET['ses'] : '';
$qty=(isset($_GET['qty']) && $_GET['qty'] != '') ? $_GET['qty'] : '';
mysql_query("INSERT INTO tbl_session_cart VALUES (" . $ses. ", " . $id . ", " . $qty .")");
$rs = mysql_query("SELECT pd_name, pd_general_price, cart_qty, cat_id
FROM tbl_session_cart sc
LEFT JOIN tbl_product p ON sc.pd_id = p.pd_id
WHERE ses_id LIKE '" . $ses. "'");
while($obj = mysql_fetch_object($rs)) {
$arr[] = $obj;
}
echo '{"cart_items":'.json_encode($arr).'}';
?>
我已经彻底测试了脚本,并得出结论,PHP脚本可以自行运行,并且可以进行必要的数据库更新,并且AJAX脚本本身在接收响应时运行良好。
但是,当通过AJAX脚本调用时,PHP脚本产生的响应是一个空数组,并且没有完成数据库更新。是否有一些我在AJAX脚本中遗漏的参数?或者它完全是另一回事?
作为参考,当我直接调用它时,我将包括PHP脚本完成的回显。我检查了这个及其有效的JSON响应:
{
"cart_items": [
{
"pd_name": "Original Vanilla",
"pd_general_price": "100.00",
"cart_qty": "2",
"cat_id": "1"
},
{
"pd_name": "Original Vanilla",
"pd_general_price": "100.00",
"cart_qty": "2",
"cat_id": "1"
},
{
"pd_name": "Original Vanilla",
"pd_general_price": "100.00",
"cart_qty": "2",
"cat_id": "1"
}
]
}
答案 0 :(得分:0)
尝试
$array = array("cart_items"=>$arr);
echo json_encode($array);
而不是
echo '{"cart_items":'.json_encode($arr).'}';
答案 1 :(得分:0)
我想你错过了解码json:
while($obj = mysql_fetch_object($rs)) {
$arr[] = $obj;
}
$json = '{"cart_items":'.json_encode($arr).'}';
echo json_decode($json); //<---may be this has to be done