
本文详解如何正确使用 Fetch API 将 JavaScript 生成的 JSON 数据(如 Excel 转换结果)发送至 PHP 后端,并确保 PHP 能可靠接收和解析,避免 $_POST 为空的问题。
本文详解如何正确使用 fetch api 将 javascript 生成的 json 数据(如 excel 转换结果)发送至 php 后端,并确保 php 能可靠接收和解析,避免 `$_post` 为空的问题。
在前端将 Excel 文件解析为 JSON 并提交至 PHP 的过程中,常见错误在于请求方式与后端接收逻辑不匹配。你当前代码存在三个关键问题:
-
错误使用 FormData + Blob + body: data.data
FormData 实例没有 .data 属性(data.data 为 undefined),导致 fetch 实际发送空请求体; -
PHP 端尝试从 $_POST['data'] 读取 JSON 字符串,但未正确解析
即使数据成功送达,$_POST 仅用于表单编码(application/x-www-form-urlencoded 或 multipart/form-data),而 JSON 原始字符串需通过 php://input 获取; -
路径与环境配置缺失
如答案提示,若 PHP 文件不在 Web 服务器可访问路径(如未置于 public/ 目录下),请求会因 404 失败,根本无法到达后端。
✅ 正确做法分两步:
1. 前端:使用标准 JSON POST 请求(推荐)
function testBud(dt1) {
const jsonData = JSON.stringify(dt1);
fetch("./public/model/importBud.php", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: jsonData // 直接传字符串,无需 FormData/Blob
})
.then(resp => {
if (!resp.ok) throw new Error(`HTTP ${resp.status}`);
return resp.text();
})
.then(data => console.log("PHP response:", data))
.catch(err => console.error("Fetch error:", err));
}
2. 后端:从 php://input 读取并解析 JSON
<?php // importBud.php
header('Content-Type: application/json; charset=utf-8');
// 读取原始请求体(适用于 application/json)
$jsonInput = file_get_contents('php://input');
if (empty($jsonInput)) {
echo json_encode(['status' => 'error', 'message' => 'No JSON data received']);
exit;
}
$data = json_decode($jsonInput, true);
if (json_last_error() !== JSON_ERROR_NONE) {
echo json_encode(['status' => 'error', 'message' => 'Invalid JSON format']);
exit;
}
// ✅ 此时 $data 是已解析的 PHP 数组,可直接处理(如入库)
var_dump($data); // 示例:打印结构
echo json_encode(['status' => 'success', 'received_rows' => count($data)]);
?>
⚠️ 注意事项:
- 不要混用 FormData 和 application/json:若需上传文件+JSON,才用 FormData;纯 JSON 提交请直接 body: jsonString + Content-Type: application/json;
- 路径必须可访问:确保 ./public/model/importBud.php 在 Web 根目录下真实存在且可通过浏览器直接访问(测试:打开 http://localhost/public/model/importBud.php 应返回 PHP 输出);
- 启用 CORS(开发环境):若跨域,PHP 需添加 header("Access-Control-Allow-Origin: *");(生产环境请限制来源);
- Excel 解析可靠性:XLSX.utils.sheet_to_row_object_array() 对空行/格式异常敏感,建议添加 if (rowObject && rowObject.length > 0) 安全判断。
按此方案重构后,JSON 数据将完整、准确地抵达 PHP,后续数据库写入等逻辑即可基于 $data 数组安全展开。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











