
本文详解如何通过 fetch api 正确将 javascript 生成的 json 数据(如 excel 解析结果)发送至 php 后端,并确保 php 能成功接收和解析,避免常见的空值、$_post 未获取等问题。
本文详解如何通过 fetch api 正确将 javascript 生成的 json 数据(如 excel 解析结果)发送至 php 后端,并确保 php 能成功接收和解析,避免常见的空值、$_post 未获取等问题。
在前端将 Excel 文件解析为 JSON 后,若直接用 FormData 封装 JSON 字符串并错误设置请求体或头信息,PHP 很可能无法从 $_POST 或 php://input 中正确读取数据——这正是原代码的核心问题:body: data.data 是无效属性(FormData 实例无 .data 属性),且混合使用 FormData 与 JSON 类型时未匹配 PHP 的接收方式。
✅ 正确做法:两种推荐方案
方案一:纯 JSON 提交(推荐)
前端直接发送 JSON 字符串,PHP 通过 php://input 读取原始请求体:
function testBud(dt1) {
const dt = JSON.stringify(dt1);
fetch("./public/model/importBud.php", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: dt // 直接传字符串,无需 Blob 或 FormData
})
.then(resp => {
if (!resp.ok) throw new Error("HTTP error: " + resp.status);
return resp.text();
})
.then(data => console.log("PHP response:", data))
.catch(err => console.error("Fetch failed:", err));
}
对应 PHP(importBud.php):
<?php header('Content-Type: application/json; charset=utf-8');
// 读取原始 JSON 请求体
$jsonInput = file_get_contents('php://input');
if (empty($jsonInput)) {
echo "vacío";
exit;
}
$obj = json_decode($jsonInput, true);
if (json_last_error() !== JSON_ERROR_NONE) {
echo "JSON inválido";
exit;
}
// ✅ 此时 $obj 是关联数组,可直接处理
var_dump($obj); // 示例:打印结构
echo "lleno";
?>
方案二:使用 FormData(需 PHP 配合)
若必须用 FormData(例如同时上传文件+JSON),则 PHP 应通过 $_POST['data'] 获取字符串形式的 JSON,再手动解析:
function testBud(dt1) {
const dt = JSON.stringify(dt1);
const data = new FormData();
data.append("data", dt); // ⚠️ 直接 append 字符串,非 Blob
fetch("./public/model/importBud.php", {
method: "POST",
body: data // 直接传 data 实例
})
// ... 处理响应
}
对应 PHP:
<?php if (isset($_POST['data']) && !empty($_POST['data'])) {
$jsonStr = $_POST['data'];
$obj = json_decode($jsonStr, true);
if (json_last_error() === JSON_ERROR_NONE) {
echo "lleno";
// 处理 $obj...
} else {
echo "JSON inválido";
}
} else {
echo "vacío";
}
?>
⚠️ 关键注意事项
- 路径问题:确保 PHP 文件路径正确(如 ./public/model/...),避免 404 导致静默失败;
- CORS 与服务器配置:本地开发建议使用 php -S 或正规 Web 服务器(如 Apache/Nginx),避免浏览器跨域拦截;
- 不要混用 Content-Type: application/json 与 FormData:二者互斥——FormData 自动设置 multipart/form-data,此时 PHP 只能通过 $_POST 获取字段;
- 始终验证 JSON 有效性:json_decode() 后务必检查 json_last_error();
- 调试技巧:在 PHP 开头添加 error_log(print_r($_POST, true)); 和 error_log(file_get_contents('php://input')); 辅助定位。
掌握以上任一方案,即可稳定实现 JS → PHP 的 JSON 传输,为后续数据库存储等业务逻辑打下可靠基础。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











