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

AJAX传递JSON数据异常:请求载荷可见但POST变量无数据

问题解决:AJAX传递JSON后PHP无法通过$_POST获取数据

问题原因

当你设置contentType: 'application/json'时,请求体是纯JSON字符串,而PHP的$_POST数组仅针对表单编码格式(application/x-www-form-urlencoded或multipart/form-data)的请求自动解析数据,因此无法直接从$_POST中读取JSON内容。

解决方案一:修改前端代码(推荐)

无需手动转换JSON字符串,直接传递JavaScript对象,jQuery会自动将其编码为表单格式,PHP即可正常通过$_POST获取数据:

var p = {
    c: c,
    g: g,
    t: t
};

$.ajax({
    url: "addedit.php",
    type: 'POST',
    dataType: 'json',
    // 移除contentType设置,jQuery默认使用application/x-www-form-urlencoded
    data: p,
    success: function () {
        alert("success");
    }
});

对应后端PHP代码:

// 直接从$_POST获取字段
$c = $_POST['c'];
$g = $_POST['g'];
$t = $_POST['t'];

// 如需转为对象格式
$myjson = (object)$_POST;
var_dump($myjson);

解决方案二:修改后端代码(适配JSON请求)

如果必须保持前端发送JSON格式请求,后端需从php://input读取原始请求体后解析JSON:

// 读取原始请求数据
$rawData = file_get_contents('php://input');
// 解析JSON字符串为对象
$myjson = json_decode($rawData);

var_dump($myjson);
die;

此方式下前端代码无需修改,保持原有写法即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 08:18:25