[英]sent data from ajax (vanilla version) doesn't store in $_POST in PHP
I have this JS code ()我有这个 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);
and PHP code recv.php
:和 PHP 代码
recv.php
:
<?php
$firstName = $_POST["first_name"];
$lastName = $_POST["last_name"];
echo $firstName." ".$lastName;
?>
When I tried to run the page it says undefined index: first_name
(and last_name
).当我尝试运行该页面时,它显示 undefined index:
first_name
(和last_name
)。
Is there other method without using file_get_contents('php://input')
then json_decode()
in PHP or sending data in FormData
object in JS but to store sent data to $_POST
automatically?是否有其他方法不使用 PHP 中
file_get_contents('php://input')
然后json_decode()
或在 JS 中的FormData
object 中发送数据但自动将发送的数据存储到$_POST
?
Edit:编辑:
I also wanted to know why I can't access through $_POST
just like sending the data through a form
我也想知道为什么我不能像通过
form
发送数据一样通过$_POST
访问
If you want to send a JSON-String representation, your PHP file should json_decode
to convert it to a StdObject:如果您想发送 JSON 字符串表示,您的 PHP 文件应该
json_decode
以将其转换为 StdObject:
<?php
$json = file_get_contents('php://input');
$data = json_decode($json);
echo $data->first_name ." ". $data->last_name;
and the JavaScript:和 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" });
Otherwise, I suggest to use JavaScript FormData:否则,我建议使用 JavaScript FormData:
PHP file: PHP 文件:
<?php
$firstName = $_POST["first_name"];
$lastName = $_POST["last_name"];
echo $firstName ." ". $lastName;
JavaScript: 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
you should see finally "cholo yologs"
in console.您最终应该会在控制台中看到
"cholo yologs"
。
Instead of XMLHttpRequest you could use the Fetch API:您可以使用 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"
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.