Ответ Json из корзины покупок PHP-файл возвращает неопределенный

#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. Спасибо, Муса, но твоя попытка не решает проблему. Я даже больше не получаю обратной связи. Пожалуйста, просмотрите его еще раз. Спасибо.