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

原生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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 08:57:17