axios http 始终 returns 且数据为空
axios http always returns with empty data
我以前问过这个问题,但没能得到答案。我能够像下面那样使用方法:'get' 来让它工作,所以没关系,但这次我需要使用 post。在另一个项目中(使用 react、redux、php、webpack、xampp),同样的问题又出现了,我正在努力解决。所以这里是:
register.php
echo $_GET['task'];
index.js
const values = {task: 'doSomething', username: 'username'}
axios({
url: "./server/register.php",
timeout: 20000,
method: 'get',
params: values
}).then(function(response){console.log(response.data)})
当我执行上述操作时,一切正常,数据被注销为 'doSomething'。但是,当我尝试使用 axios({method: 'POST'}) 并将 php 更改为 $_POST['task'] 时,我收到一条错误消息,指出 $_POST['task' ] 未定义,如下所示:
index.js
axios({
url: "/projects/myProject/server/register.php",
method: 'post',
data: values
}).then(function(response){console.log(response.data)})
register.php
echo $_POST['task'];
Notice: Undefined index: task
另外,当我使用 axios.post() 尝试此操作时,我遇到了完全相同的问题。我想在这里使用 post 请求。任何人都可以为我阐明这一点吗?
您 url 的格式不正确:它是路径而不是 url。您必须使用相对 (/register.php) 或绝对 (http://localhost/register.php) url 取决于您如何使用 Web 服务器提供此文件。
好吧,经过相当多的摸索之后,我找到了答案。在 PHP 上,必须添加这一行才能访问任何 POST 数据:
$_POST = json_decode(file_get_contents('php://input'), true);
echo $_POST['task'];
根据我的理解,从 axios 输入的数据是 JSON 所以我们必须 return 使用 file_get_contents() 在 JSON 编码的字符串中,然后转换它使用 json_decode 从 JSON 编码的字符串转换为 php 变量。希望这可以帮助别人。谢谢你。
作为替代方案,在客户端,您可以在 POST 之前处理 JavaScript 中的数据,从而无需在服务器端编辑 POST 数据:
var formatAxiosPostData = function (obj) {
// Create formData object:
var formDataObject = new FormData();
// This step necessary when the obj contains additional overhead data,
// such as what's created on a 'this.$data' Vue.js object:
obj = JSON.parse(JSON.stringify(obj));
// Fill formData object with the key-value pairs:
Object.keys(obj).forEach(function (key) {
formDataObject.append(key, obj[key]);
});
return formDataObject;
};
// example usage:
axios({
url: "/projects/myProject/server/register.php",
method: 'post',
data: formatAxiosPostData(values)
}).then(function (response){
console.log(response.data);
});
我以前问过这个问题,但没能得到答案。我能够像下面那样使用方法:'get' 来让它工作,所以没关系,但这次我需要使用 post。在另一个项目中(使用 react、redux、php、webpack、xampp),同样的问题又出现了,我正在努力解决。所以这里是:
register.php
echo $_GET['task'];
index.js
const values = {task: 'doSomething', username: 'username'}
axios({
url: "./server/register.php",
timeout: 20000,
method: 'get',
params: values
}).then(function(response){console.log(response.data)})
当我执行上述操作时,一切正常,数据被注销为 'doSomething'。但是,当我尝试使用 axios({method: 'POST'}) 并将 php 更改为 $_POST['task'] 时,我收到一条错误消息,指出 $_POST['task' ] 未定义,如下所示:
index.js
axios({
url: "/projects/myProject/server/register.php",
method: 'post',
data: values
}).then(function(response){console.log(response.data)})
register.php
echo $_POST['task'];
Notice: Undefined index: task
另外,当我使用 axios.post() 尝试此操作时,我遇到了完全相同的问题。我想在这里使用 post 请求。任何人都可以为我阐明这一点吗?
您 url 的格式不正确:它是路径而不是 url。您必须使用相对 (/register.php) 或绝对 (http://localhost/register.php) url 取决于您如何使用 Web 服务器提供此文件。
好吧,经过相当多的摸索之后,我找到了答案。在 PHP 上,必须添加这一行才能访问任何 POST 数据:
$_POST = json_decode(file_get_contents('php://input'), true);
echo $_POST['task'];
根据我的理解,从 axios 输入的数据是 JSON 所以我们必须 return 使用 file_get_contents() 在 JSON 编码的字符串中,然后转换它使用 json_decode 从 JSON 编码的字符串转换为 php 变量。希望这可以帮助别人。谢谢你。
作为替代方案,在客户端,您可以在 POST 之前处理 JavaScript 中的数据,从而无需在服务器端编辑 POST 数据:
var formatAxiosPostData = function (obj) {
// Create formData object:
var formDataObject = new FormData();
// This step necessary when the obj contains additional overhead data,
// such as what's created on a 'this.$data' Vue.js object:
obj = JSON.parse(JSON.stringify(obj));
// Fill formData object with the key-value pairs:
Object.keys(obj).forEach(function (key) {
formDataObject.append(key, obj[key]);
});
return formDataObject;
};
// example usage:
axios({
url: "/projects/myProject/server/register.php",
method: 'post',
data: formatAxiosPostData(values)
}).then(function (response){
console.log(response.data);
});