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
相关产品推荐
相关产品推荐

