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

PHP表单处理程序无法解析JavaScript XMLHttpRequest发送的JSON数据

问题根因

  1. PHP端传参错误:需要解析的JSON字符串存放在$_GET数组的data字段中,你错误将整个$_GET数组传入json_decode,数组无法被JSON解析工具识别,返回null,后续字段取值自然为空。
  2. 前端未做URL编码:JSON字符串包含双引号、空格等特殊字符,直接拼接到GET请求URL中会被自动转义或截断,导致后端拿到的JSON格式损坏,解析失败。
  3. 缺少错误校验:未判断json_decode的解析结果合法性,无法快速定位问题。

修复步骤

1. 前端代码修改

对拼接的JSON字符串做URL编码,修改请求初始化代码:

const prospectJson = JSON.stringify(prospect);
// 新增encodeURIComponent编码处理
xhr.open('get', 'inc/contact_form_handler.php?data=' + encodeURIComponent(prospectJson), false);
xhr.send();

2. 后端代码修改

从data字段取JSON字符串解析,新增解析校验逻辑:

/* get form data JSON */
$prospectArray = $_GET;
print_r($prospectArray);

// 先校验参数存在性
if (!isset($prospectArray['data'])) {
    http_response_code(400);
    exit('缺少必要的data参数');
}

// 从data字段取JSON字符串解析
$arr = json_decode($prospectArray['data'], true);

// 校验解析结果合法性
if (json_last_error() !== JSON_ERROR_NONE || !is_array($arr)) {
    http_response_code(400);
    exit('JSON解析失败:' . json_last_error_msg());
}

// 正常赋值
$firstName = $arr["first_name"];
$lastName = $arr["last_name"];
$email = $arr["email"];
$projectDescription = $arr["project_description"];

可选优化

提交表单数据更推荐使用POST请求,GET请求有长度限制,且参数会留在服务器访问日志中,安全性和适用性都弱于POST。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:15:03