原生AJAX POST请求返回空结果,ajax.php无法接收数据
解决AJAX JSON数据无法被PHP接收的问题
问题原因
你发送的是JSON格式请求体且设置了Content-Type: application/json,但PHP的$_POST全局变量仅默认解析application/x-www-form-urlencoded或multipart/form-data类型的请求数据,因此无法直接通过$_POST获取JSON内容。另外你PHP代码中尝试获取$_POST['test'],但前端发送的是{ data: "test" },即使能解析也会因键名不匹配拿不到数据。
解决方案一:修改PHP代码解析JSON请求体
直接读取原始请求内容并解析JSON:
// 读取原始请求数据流 $rawRequest = file_get_contents('php://input'); // 将JSON转为关联数组 $requestData = json_decode($rawRequest, true); // 输出对应的数据(注意前端发送的键是data) echo json_encode($requestData['data']);
解决方案二:修改前端发送表单编码数据
如果希望继续使用$_POST接收,可将前端数据转为表单编码格式发送:
window.addEventListener("DOMContentLoaded", (event) => { var xhr = new XMLHttpRequest(); xhr.open('POST', 'src/ajax.php', true); // 表单编码类型(可省略,XMLHttpRequest默认会自动设置) xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xhr.onreadystatechange = function () { if (xhr.readyState === 4 && xhr.status === 200) { var response = JSON.parse(xhr.responseText); console.log(response); } }; // 用URLSearchParams构造表单数据 var params = new URLSearchParams(); params.append('data', 'test'); xhr.send(params); });
对应的PHP代码:
echo json_encode($_POST['data']);
内容的提问来源于stack exchange,提问作者MatthieuIX
相关产品推荐
相关产品推荐

