Axios 发布参数未被 $_POST 读取使用 application/x-www-form-urlencoded format

2022-08-30 10:21:10

所以我有这个代码:

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

最初我有正常,但我改变了这个,因为我认为这可能是一个标题问题。但是,我仍然在我的 nor 中检测到任何内容。但是,它正在 接收 中的数据。axios.post$_REQUEST$_POSTfile_get_contents("php://input")

任何想法是什么问题?

编辑

好吧,我想我知道出了什么问题。它将其作为 json 对象发布,因此只能在 php://input 中读取。如何在公理中将其更改为普通字符串?


答案 1

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

使用 application/x-www-form-urlencoded format

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

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

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

  • application/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,但是有一个polyfill可用(确保polyfill全局环境)。

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

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

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


答案 2
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'];