Jor*_*ade 9 javascript php ajax post json
我尝试使用 XMLHttpRequest 将 POST 数据发送到 PHP 文件。URL 是正确的,但 PHP 无法捕获任何发送的数据,只能返回空响应。
我在客户端使用纯 JavaScript,在服务器上使用 PHP 7.1
我的PHP:
$data->msg = 'PHP is working';
$data->user = $_POST['user'];
$data->pass = $_POST['pass'];
echo json_encode($data);
Run Code Online (Sandbox Code Playgroud)
我的 JavaScript:
var data = { 'user': 'myUser', 'pass': 'myPass' };
var xhr = new XMLHttpRequest();
xhr.open('POST', 'myurl', true);
xhr.setRequestHeader("Content-Type", "application/json; charset=UTF-8");
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
var res = JSON.parse(xhr.response);
console.log(res);
}
};
xhr.send(data);
// Expected output: {msg: "PHP is working", user: myUser, pass: myPass}
// But just recive: {msg: "PHP is working", user: null, pass: null}
Run Code Online (Sandbox Code Playgroud)
我期望这样的响应:{msg:“PHP正在工作”,用户:myUser,pass:myPass}但只需接收:{msg:“PHP正在工作”,用户:null,pass:null}
正如您所看到的,PHP $_POST 无法捕获我发送的帖子数据,只能返回 null。穿什么??
Mic*_*ica 10
问题出在您的内容类型中。如果您使用application/json
PHP,则不会将发布数据解析为 $_POST 变量。您必须将它们作为表单数据发送才能让 PHP 解析它。
有关详细信息,请参阅此问题使用 XMLHttpRequest 发送 POST 数据
或者,您可以使用file_get_contents("php://input")
来获取 HTTP 请求的原始正文并使用 .json 解析 json json_decode
。
file_get_contents 和 json_decode 的示例
PHP代码:
$in = file_get_contents('php://input');
$decoded = json_decode($in, true);
$data = new stdClass();
$data->msg = 'PHP is working';
$data->user = $decoded['user'];
$data->pass = $decoded['pass'];
echo json_encode($data);
Run Code Online (Sandbox Code Playgroud)
JS代码:
var data = { 'user': 'myUser', 'pass': 'myPass' };
var xhr = new XMLHttpRequest();
xhr.open('POST', 'myUrl', true);
xhr.setRequestHeader("Content-Type", "application/json; charset=UTF-8");
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
var res = JSON.parse(xhr.response);
console.log(res);
}
};
xhr.send(JSON.stringify(data));
return false;
Run Code Online (Sandbox Code Playgroud)
JSON.stringify
请注意,在将数据对象作为参数传递给方法之前,您需要先获取数据对象send()
。否则数据无法正确发送。