#javascript #php #json #xmlhttprequest #shopping-cart
Вопрос:
Я работаю над тележкой для покупок. Я использую php и javascript с вызовом xmlhttprequest для ajax-части приложения. Моя проблема в том, что каждый раз, когда я нажимаю кнопку «добавить в корзину», информация о продукте отправляется в виде типа json через xmlhttprequest в файл php, но файл php возвращает только «неопределенный». Идея состоит в том, чтобы получить количество сеансов в корзине покупок.
Ниже приведен код:
файл xmlhttprequest (dodo.js):
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 "amp;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 amp;amp; 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 файл (cartprocess.php) :
<?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_name' => $_POST["product_name"],
'product_price' => $_POST["product_price"],
'product_desc' => $_POST["product_desc"],
'product_imag' => $_POST["product_imag"]
);
$_SESSION["cartad"][0] = $item_new;
}
$json['count'] = count($_SESSION["cartad"]);
}
header('Content-Type: application/json');
echo json_encode($json);
Комментарии:
1. Я также был бы признателен за хорошую ссылку на электронную книгу, хороший учебник или хороший веб-сайт, который поможет мне обновить знания о корзине покупок с помощью php и xmlhttprequest / ajax. Спасибо.
Ответ №1:
У вас здесь 2 проблемы.
Во-первых, вы не отправляете json в своем запросе, для этого вам нужно преобразовать свой объект в json.
ajaxConnector.send(JSON.stringify(sedd));
Во-вторых, я бы не прочитал это, если бы вы отправили json. $_POST не заполняется для запроса json.
Чтобы получить данные 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_name' => $POST["product_name"],
'product_price' => $POST["product_price"],
'product_desc' => $POST["product_desc"],
'product_imag' => $POST["product_imag"]
);
$_SESSION["cartad"][0] = $item_new;
}
$json['count'] = count($_SESSION["cartad"]);
}
header('Content-Type: application/json');
echo json_encode($json)
;
Комментарии:
1. Спасибо, Муса, но твоя попытка не решает проблему. Я даже больше не получаю обратной связи. Пожалуйста, просмотрите его еще раз. Спасибо.