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。
错误原因
- 数据类型不匹配:
json_decode($json)默认返回stdClass对象,而非关联数组,用数组索引$data['total']访问对象属性会直接抛出错误,导致500状态码。 - 字符串无法直接运算:前端传入的
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
相关产品推荐
相关产品推荐

