我有这样的JS代码()
var obj = {
first_name: 'cholo',
last_name: 'yologs'
};
var xmlHttp = new XMLHttpRequest();
xmlHttp.open("post", "recv.php");
xmlHttp.send(JSON.stringify(obj)); // or xmlHttp.send(obj);
和PHP代码 recv.php
:
<?php
$firstName = $_POST["first_name"];
$lastName = $_POST["last_name"];
echo $firstName." ".$lastName;
?>
当我试图运行该页面时,它说undefined index。first_name
(和 last_name
). 有没有其他方法不使用 file_get_contents('php://input')
然后 json_decode()
或在PHP中发送数据 FormData
对象,但要将发送的数据存储到 $_POST
自动?
编辑:我还想知道为什么我不能通过 $_POST
就像把数据通过 form
如果你想发送一个JSON-字符串表示,你的PHP文件应该是 json_decode
来将其转换为StdObject。
<?php
$json = file_get_contents('php://input');
$data = json_decode($json);
echo $data->first_name ." ". $data->last_name;
和JavaScript。
const obj = {
first_name: "cholo",
last_name: "yologs"
};
// FETCH
fetch("recv.php", {method: 'POST', body: JSON.stringify(obj)})
.then(res => res.text())
.then(data => {
console.log(data); // "cholo yologs"
});
否则,我建议使用JavaScript FormData。
PHP文件。
<?php
$firstName = $_POST["first_name"];
$lastName = $_POST["last_name"];
echo $firstName ." ". $lastName;
JavaScript。
const obj = {
first_name: "cholo",
last_name: "yologs"
};
// Convert your Object literal to FormData
const FD = new FormData();
Object.entries(obj).forEach(([p, v]) => FD.append(p, v));
// XHR
const xmlHttp = new XMLHttpRequest();
xmlHttp.addEventListener("load", () => {
if (xmlHttp.status == 200) {
console.log(xmlHttp.responseText); // "cholo yologs"
} else {
console.error("Error!");
}
});
xmlHttp.open("post", "recv.php");
xmlHttp.send(FD); // Send the FormData
你应该看到最后 "cholo yologs"
在控制台中。
你可以使用Fetch API代替XMLHttpRequest。
const obj = {
first_name: "cholo",
last_name: "yologs"
};
// Convert your Object literal to FormData
const FD = new FormData();
Object.entries(obj).forEach(([p, v]) => FD.append(p, v));
// FETCH
fetch("recv.php", {method: "POST", body: FD})
.then(res => res.text())
.then(data => {
console.log(data); // "cholo yologs"
});