如何解决来自购物车 PHP 文件的 Json 响应返回未定义
我正在处理购物车。我使用 PHP 和 javascript 和 xmlhttprequest 调用应用程序的 ajax 端。 我的问题是每当我单击“添加到购物车”按钮时,产品信息都会通过 xmlhttprequest 作为 json 类型发送到 PHP 文件,但 PHP 文件只返回“未定义”。这个想法是获取购物车的会话计数。
代码如下:
function postForm(){
var inputid = document.getElementById("product_id").value;
var inputname = document.getElementById("product_name").value;
var inputprice = document.getElementById("product_price").value;
var inputdesc = document.getElementById("product_desc").value;
var inputimag = document.getElementById("product_imag").value;
//var action = "add";
var sedd = {product_id : inputid,product_name : inputname,product_price : inputprice,product_desc : inputdesc,product_imag : inputimag};
//var sedd = "product_id="+inputid+"&action="+action;
if(ajaxConnector.readyState == 0 || ajaxConnector.readyState == 4){
ajaxConnector.open("POST","cartprocess.PHP",true);
ajaxConnector.setRequestHeader("Content-Type","json");
ajaxConnector.onreadystatechange = () => {
if(ajaxConnector.readyState == 4 && ajaxConnector.status == 200){
//document.getElementById("sapo").innerHTML = "<p>Sent Now</p>";
//json = JSON.parse(ajaxConnector.responseText);
$("#cart-added-main").show(function(){
$("#cart-added-show").html(inputname+" added to cart");
$("#cart-added-main").fadeOut(8000);
});
document.getElementById("numero").innerHTML = JSON.parse(ajaxConnector.responseText).count;
//document.getElementById("sapo").innerHTML = ajaxConnector.responseText;
}//else{
//alert('Failed to add to cart.');
//}
}
ajaxConnector.send(sedd);
}
}
<?PHP
session_start();
$json = array();
if(!empty($_POST["product_id"])){
if(isset($_SESSION["cartad"])){
$item_new_id = array_column($_SESSION["cartad"],"product_id");
if(!in_array($_POST["product_id"],$item_new_id)){
foreach($_SESSION["cartad"] as $keys => $values){
if($values["product_id"] == $_POST[product_id]){
$item_new = array(
'product_id' => $_POST["product_id"],'product_name' => $_POST["product_name"],'product_price' => $_POST["product_price"],'product_desc' => $_POST["product_desc"],'product_imag' => $_POST["product_imag"]
);
$_SESSION["cartad"][$count] = $item_new;
}
}
}else{
$output = "Item already added";
}
}else{
$item_new = array(
'product_id' => $_POST["product_id"],'product_imag' => $_POST["product_imag"]
);
$_SESSION["cartad"][0] = $item_new;
}
$json['count'] = count($_SESSION["cartad"]);
}
header('Content-Type: application/json');
echo json_encode($json);
解决方法
这里有两个问题。
首先是您没有在请求中发送 json,为此您必须将对象转换为 json。
ajaxConnector.send(JSON.stringify(sedd));
其次,如果您发送了 json,则不会阅读它。未为 json 请求填充 $_POST。
要获取 json 数据,您必须从 php://input
<?php
session_start();
$json = array();
$POST = json_decode(file_get_contents("php://input"),true); //<-- here
if(!empty($POST["product_id"])){
if(isset($_SESSION["cartad"])){
$item_new_id = array_column($_SESSION["cartad"],"product_id");
if(!in_array($POST["product_id"],$item_new_id)){
foreach($_SESSION["cartad"] as $keys => $values){
if($values["product_id"] == $POST[product_id]){
$item_new = array(
'product_id' => $POST["product_id"],'product_name' => $POST["product_name"],'product_price' => $POST["product_price"],'product_desc' => $POST["product_desc"],'product_imag' => $POST["product_imag"]
);
$_SESSION["cartad"][$count] = $item_new;
}
}
}else{
$output = "Item already added";
}
}else{
$item_new = array(
'product_id' => $POST["product_id"],'product_imag' => $POST["product_imag"]
);
$_SESSION["cartad"][0] = $item_new;
}
$json['count'] = count($_SESSION["cartad"]);
}
header('Content-Type: application/json');
echo json_encode($json)
;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。