首页 > 解决方案 > 成功 AJAX POST 到 PHP 文件后如何迭代 json 数据?

问题描述

我已经创建了一个会话购物车,但我不确定如何在 AJAX POST 成功后迭代来自 PHP 的响应数据。实际上,我需要 $_SESSION['cart'] 中存在的产品的总数量和价格。到目前为止我做了什么:

PHP

<?php

session_start();

if ($_SERVER['REQUEST_METHOD'] === 'POST') {

    $product_ids = array_column($_SESSION['cart'], 'product_id');
    $index = count($_SESSION['cart']);

    //if product has not been already in cart
    if (!in_array($_POST['product_id'], $product_ids)) {

        $product = array(
            'product_id' => $_POST['product_id'] + 0,
            'product_quantity' => $_POST['product_quantity'] + 0,
            'product_price' => $_POST['product_price'] + 0
        );

        $_SESSION['cart'][++$index] = $product;
    }

    //if product exists update it's quantity and total price
    else {

        $new_quantity = $_POST['product_quantity'] + $_SESSION['cart'][$index]['product_quantity'];
        $new_price = $_POST['product_price'] + $_SESSION['cart'][$index]['product_price'];

        $product = array(
            'product_id' => $_POST['product_id'] + 0,
            'product_quantity' => $new_quantity,
            'product_price' => $new_price
        );

        $_SESSION['cart'][$index] = $product;
    }

    header('Content-Type: application/json');
    
    echo json_encode($_SESSION['cart']);
}

JS

    $('.btn-cart').click(function () {

        var product_id = parseInt(this.id);
        var product_quantity = parseInt($(this).closest("div").prev().find("input[type='number']").val());
        var product_price = parseFloat($(this).closest("div").find("input[type='hidden']").val());

 
        $.post('../../session_cart.php', {
            product_id: product_id,
            product_quantity: product_quantity,
            product_price: product_price
        })
            .done(function (data) {

                console.log(data);

            })
            .fail(function (xhr, status, error) {
                var errorMessage = xhr.status + ': ' + xhr.statusText
                console.log('Error - ' + errorMessage);
            });
    });

欢迎所有想法或建议!

标签: phpjqueryajaxcart

解决方案


JS:

  $('.btn-cart').click(function () {

        var product_id = parseInt(this.id);
        var product_quantity = parseInt($(this).closest("div").prev().find("input[type='number']").val());
        var product_price = parseFloat($(this).closest("div").find("input[type='hidden']").val());

 
        $.post('../../session_cart.php', {
            product_id: product_id,
            product_quantity: product_quantity,
            product_price: product_price
        })
            .done(function (data) {
                var total_price= 0;
                var total_quantity = 0;
                var json_data = JSON.parse(JSON.stringify(data));
                for (key in json_data){
                  total_price += Number(json_data[key]['product_price']);
                  total_quantity += Number(json_data[key]['product_quantity']);
            }

                console.log(total_quantity);
                console.log(total_price);

            })
            .fail(function (xhr, status, error) {
                var errorMessage = xhr.status + ': ' + xhr.statusText
                console.log('Error - ' + errorMessage);
            });
    });

解析data来并将其存储在json_data.


推荐阅读