【发布时间】:2019-08-28 12:55:22
【问题描述】:
开发者。我正在运行本地 apache 服务器。有静态 Vue 文件和带有一些脚本的“打印”文件夹。我正在尝试从 Vue(通过 axios)向“打印”文件夹发送 http 请求。
我尝试使用 vue-resource 发送数据,但我遇到了同样的问题。
这是一个 Vue 方法:
postData: function() {
const data = {
firstName: "John",
lastName: "Doe"
};
const config = {
headers: {
"Content-Type": "application/x-www-form-urlencoded"
}
};
axios
.post("/print", data, config)
.then(function(response) {
console.log(response);
})
.catch(function(error) {
console.log(error);
});
}
打印文件夹中的 index.php 文件:
<?php
$postBody = file_get_contents("php://input");
$postBody = json_encode($postBody);
echo 'Post: ',$postBody, ' here';
以下是网络标签中的一些屏幕截图(质量问题,请见谅) 我不确定为什么 devtools 将请求视为 GET,但我使用 POST
当我将响应记录到控制台时,它看起来像这样。这里的响应实际上是 POST。但数据仍然缺失。
“预览”选项卡看起来像这样。
请求实际上到达了文件,但$postBody 只是一个空字符串。我猜问题是("php://input") 没有得到任何输入。当echo count($_POST) 0 返回时。感谢您的帮助..
【问题讨论】:
-
您的屏幕截图显示了对
/print的GET 请求,但您使用的是axios.post。那没有意义。你确定你使用你的postData方法来触发请求吗 -
这很奇怪。是的,肯定会使用 postData。当我在控制台中记录响应时,它显示该方法实际上是 POST。可能问题出在开发工具中。
-
json_encode()在你的 PHP 中应该是json_decode()。请参阅下面的答案 -
这是表单中的按钮吗?如果是这样,请参阅我的答案中关于添加“.prevent”事件修饰符的注释
-
非常感谢@Phil。这很奇怪,但是问题出在目录地址上。输入
/print时发出 GET 请求。将其更改为/print/index.php后,一切正常并发出 POST 请求。 @Phil,编辑添加这一点的答案,我会将答案打勾为正确答案。在你的提示之后,我学到了很多东西。上帝保佑你..