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

