当前位置: 首页 > 知识库问答 >
问题:

$u POST未读取Axios过帐参数

於鸿羲
2023-03-14

所以我有这个代码:

axios({
    method: 'post',
    url,
    headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
    data: {
        json,
        type,
    }   
})  

最初我有正常的axios.post,但我改成了这个,因为我认为这可能是一个标题问题。然而,我仍然没有检测到我的$_REQUEST$_POST。但是,它在file_get_contents("php://输入")中接收数据。

你知道怎么了吗?

编辑

好吧,我想我知道怎么了。它将其作为json对象发布,因此只能在php://输入中读取。如何将其更改为axios中的普通字符串

共有3个答案

萧繁
2023-03-14

如果您决定在AJAX库或服务器语言之间切换,可以使事情变得更容易和通用。使用axios使用本机JSFormData
如果对象中有数据,可以将其转换为FormData,如下所示:

var myDataObj = {id:1, name:"blah blah"}
var formData = new FormData();


for (var key in myDataObj) {
    formData.append(key, myDataObj[key])
}

然后发送数据:

axios.post('/sub/process.php', formData, {
    params: { action: "update-user" },
    headers: { 'Content-Type': 'multipart/form-data' },
    baseURL: 'http://localhost',
}).then(data =>
    console.log(data)
).catch(err => {
    console.log(err)
    return null
})

请注意,您还可以使用axios中的params发送一些信息,您可以使用$\u GET检索这些信息。还要注意,我使用的是baseURL,以防您的网页和APIendpoint有不同的服务器
您还需要了解,在axios发送实际请求之前,它会执行飞行前请求。飞行前请求是浏览器在CORS中检查资源目的地是否愿意接受真实请求的机制。毕竟,当目标主机无论如何都不愿意接收请求时,为什么会发送请求?

您必须确保您的服务器具有正确的axios请求标头,否则预飞行请求将检测不兼容并停止您的请求:

//this is if you are using different different origins/servers in your localhost, * to be update with the right address when it comes to production
header('Access-Control-Allow-Origin: *');
//this is if you are specifying content-type in your axios request
header("Access-Control-Allow-Headers: Content-Type");

现在,您可以在$\u POST变量中访问发送的数据:

echo "<pre>";
print_r($_POST);
echo "</pre>";

此外,axios允许您以不同格式发送数据。您可以发送json,例如:

axios.post('/sub/process.php', { id: "1", name:"blablah" }, {
    params: { action: "update-item" },
    headers: { 'Content-Type': 'application/json' },
    baseURL: 'http://localhost',
}).then(data =>
    console.log(data)
).catch(err => {
    console.log(err)
    return null
})

在PHP端,可以按如下方式访问:

$data = json_decode(file_get_contents("php://input"),true);
echo "<pre>";
print_r($data);
echo "</pre>";
陈俊誉
2023-03-14
var params = {
    data1: 'string',
}

axios.post(url, params).then(function(response) {
    //code here 
});

或者

axios.post(url, {data1: 'string' }).then(function(response) {
    //code here 
});

应用程序编程接口

$_POST = json_decode(file_get_contents("php://input"),true);
echo $_POST['data1'];
令狐俊风
2023-03-14

从留档(我没有保留引用材料中的链接):

默认情况下,axios将JavaScript对象序列化到JSON。

PHP不支持JSON作为填充$_POST的数据格式。

它只支持HTML表单本机支持的机器可处理格式:

  • 应用程序/x-www-form-urlencoded
  • 多部分数据

要改为以application/x-www-form-urlencoded格式发送数据,可以使用以下选项之一。

在浏览器中,可以使用URLSearchParams API,如下所示:

var params = new URLSearchParams();
params.append('param1', 'value1');
params.append('param2', 'value2');
axios.post('/foo', params); 

请注意,并非所有浏览器都支持URLSearchParams,但有一个可用的多填充(请确保对全局环境进行多填充)。

或者,您可以使用qs库对数据进行编码:

var qs = require('qs');
axios.post('/foo', qs.stringify({ 'bar': 123 }));

或者,您可以自定义PHP,以便它可以根据另一个问题的回答来处理JSON。

 类似资料:
  • 问题内容: 所以我有这段代码: 最初我是正常人,但是我更改为这个,因为我认为这可能是标题问题。但是我仍然没有检测,我也没有。但是,它正在接收数据。 知道有什么问题吗? 编辑 好吧,我想我知道怎么了。它将其作为json对象发布,因此只能在php:// input中读取。如何在axios中将其更改为普通字符串? 问题答案: 从文档中(我没有在引用的材料中保留链接): 默认情况下,axios将JavaS

  • 我们使用WebSphere 7- Application server来部署项目,这个应用服务器被赋予了简单的JVM参数, 但是当尝试启动应用服务器时,会抛出一个本机错误(native_stderr.log ),如下所示, JVM参数在WebSphere中的以下位置给出。 这很奇怪,因为它正在抛出NoClassDefFoundError。 或者 Websphere 中是否有任何其他配置可能导致此问

  • 我在获取数据方面有问题。这是控制台中弹出的错误。。。 未捕获的错误:模块构建失败(来自。/node_modules/Babel-loader/lib/index.js): SynTaxError: /var/www/html/laravel/resources/js/components/Content.vue: const是一个保留字(8:4) 我在用法上做错了什么吗? 也在App.js中

  • 我需要制作一个程序,从命令行获取可选参数。如果显示flag,我需要读取下面的正则表达式,并将其作为字符串保存到程序中。类似于: 我现在看到的是: 但是,当我从文件夹运行程序时,其中有些文件是和,程序将打印“file1.java”。如何使用“*.java”获取变量? 当我尝试打印所有参数时,使用: 它给了我: 这让我得出结论,我需要以不同的方式阅读参数...

  • 我正在尝试使用axios发送数据,但它发送的响应超出预期。当我使用postman发出相同请求时,它会成功地向我的手机发送通知,以下是postman的响应: 但是使用axios,通知不会发送到我的手机,以下是axios的响应: 这是我的axios代码:

  • 我正在尝试从react前端查询我的Azure搜索门户。我已启用正确索引上的所有COR。当我用fetch查询时,我得到的数据很好,但是当我用axios查询时,我得到了以下错误 CORS策略阻止从源http://localhost:3000在maskedurl访问XMLHttpRequest:对预试请求的响应不通过权限改造检查:请求的资源上不存在访问控制允许源标头。 这是我的组件 这是我在名为azur