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

XMLHttpRequest POST请求时PHP的$_POST为空问题求助

问题原因及解决方法

问题原因

PHP的$_POST变量默认仅会解析**application/x-www-form-urlencoded或multipart/form-data**类型的请求体。你当前通过JS发送的是application/json格式的数据,所以PHP不会自动将其填充到$_POST中,导致$_POST为空数组。

解决方案(两种可选)

方案一:修改JS代码,发送表单编码格式的数据

将请求内容改为表单键值对格式,并调整Content-Type为PHP默认支持的类型:

function save() {
  var xhr = new XMLHttpRequest();
  xhr.open("POST", "gameapi.php/", true);
  xhr.setRequestHeader('Accept', 'application/json');
  // 改为表单编码的Content-Type
  xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=UTF-8');
  // 发送键值对格式的数据
  xhr.send("saving=1");
  xhr.onload = function() {
    console.log(this.responseText);
  }
}

此时PHP端无需修改,$_POST['saving']就能获取到值1。

方案二:修改PHP代码,解析JSON格式的请求体

如果需要保持JSON格式的请求,PHP端需要直接读取原始请求体并解析:

<?php
// 读取原始请求内容
$rawData = file_get_contents('php://input');
// 解析为关联数组
$data = json_decode($rawData, true);
// 输出解析后的数据
var_dump($data);
// 可通过$data['saving']获取值1
?>

这种情况下JS代码无需修改,PHP能正确解析JSON数据。

内容的提问来源于stack exchange,提问作者Merlin the Immortal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 16:57:06