You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP无法读取Fetch API POST请求的JSON数据报错排查

问题解决:Fetch API POST请求后无法读取PHP后端元素

问题背景

使用Fetch API发送JSON格式POST请求,后端能正常接收数据并返回结果,但取消注释后端代码中的if (isset($data['total'])) {$a += $data['total'];}后,出现500服务器错误,前端控制台报SyntaxError: The string did not match the expected pattern。

错误原因

  1. 数据类型不匹配:json_decode($json)默认返回stdClass对象,而非关联数组,用数组索引$data['total']访问对象属性会直接抛出错误,导致500状态码。
  2. 字符串无法直接运算:前端传入的total是带欧元符号的字符串(如11340 €),直接用+=进行加法运算会触发类型错误。

修复方案

方案1:将JSON解析为关联数组

修改json_decode,添加第二个参数true,让解析结果返回关联数组:

$json = file_get_contents("php://input");
// 第二个参数设为true,返回关联数组
$data = json_decode($json, true);
$a = 0; // 初始化数字类型变量

if (isset($data['total'])) {
    // 去除字符串中的非数字字符,转换为数字
    $totalNum = preg_replace('/[^0-9.]/', '', $data['total']);
    $a += (float)$totalNum;
}

$a = print_r($data, true) . "\n处理后的total数值:" . $a;
$result = array(
    "success" => true,
    "message" => $a,
    "bookingCode" => '1234567'
);

$output = json_encode($result);
echo $output;

方案2:保持对象形式访问属性

如果不想用关联数组,直接用对象属性访问语法$data->total:

$json = file_get_contents("php://input");
$data = json_decode($json);
$a = 0;

if (isset($data->total)) {
    $totalNum = preg_replace('/[^0-9.]/', '', $data->total);
    $a += (float)$totalNum;
}

$a = print_r($data, true) . "\n处理后的total数值:" . $a;
$result = array(
    "success" => true,
    "message" => $a,
    "bookingCode" => '1234567'
);

$output = json_encode($result);
echo $output;

关键说明

  • json_decode的第二个参数决定返回类型:true返回关联数组,默认false返回对象,需根据访问方式对应调整。
  • 处理带符号的金额字符串时,必须先清理非数字字符,转换为数值类型后再进行运算,避免类型错误。

内容的提问来源于stack exchange,提问作者w461

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 19:39:18