javascript - 从 ajax(香草版)发送的数据不会存储在 PHP 中的 $_POST 中
问题描述
我有这个 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;
?>
当我尝试运行该页面时,它显示未定义索引:(first_name
和last_name
)。
是否有其他方法不在PHP 中使用file_get_contents('php://input')
then或在 JS 中的对象中发送数据但自动存储发送的数据?json_decode()
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"
});
推荐阅读
- vba - PowerPoint - VB 宏将 OnClick 动画添加到形状
- r - 确定R中总体标准差的函数是什么?
- python - 为什么从另一个创建新对象的程序执行函数然后访问它会返回错误
- java - 在 jhipster java 中使用 JDL 更改数据库结构
- html - Firefox 和 Chrome 中的 div 对齐方式不同
- symfony - 默认语言环境在 symfony 4 中没有改变
- bash - Bash - 传递给 rm 一个变量中的文件名,但带有 ! 选项
- android - 如何在Hashmap中放置两个值
- c# - Unity C#将图像传输到另一个场景
- python - 使用 virtualenv 和 WSGI 在 apache 上设置 Django2、python3