php - 成功 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);
});
});
欢迎所有想法或建议!
解决方案
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
.
推荐阅读
- python - 在 python 中使用 SQLCL 运行 sql 脚本
- html - 在水平弹性框中垂直堆叠 2 个项目
- bash - 使用 shell 脚本删除除每行第一个逗号之外的所有逗号
- java - 如何编写递归方法来显示 x^0 + x^1 + x^2 + ... x^n,然后显示 x^n 的计算值?
- c# - 在 ASP.NET Core 3.1 MVC+Razor Pages+Web API 中设置默认页面
- r - 将子子数据与 Excel 或 R 中的父数据相结合?
- java - 数据集被错误/随机合并?
- firebase - 是否可以设置每分钟注册配额?
- python-3.x - 有人将如何在 python 3.9 上使用 pip 安装 pytorch?
- c# - 使用机器人框架时,松弛按钮不发送响应