$_POST 未读取 Axios 发布参数

新手上路,请多包涵

所以我有这个代码:

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

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

知道有什么问题吗?

编辑

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

原文由 A. L 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 488
2 个回答

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

使用 application/x-www-form-urlencoded 格式

默认情况下,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,但有一个可用的 polyfill(确保 polyfill 全局环境)。

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

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

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

原文由 Quentin 发布,翻译遵循 CC BY-SA 4.0 许可协议

这段代码现在都适用于 浏览器/节点。我觉得这个比较实用。我在 node.js 上测试了这段代码,并使用 $_POST[‘param1’] 将数据变量传递给 PHP8,它运行良好。

 function axqs(d){
    let p = new URLSearchParams();
    Object.keys(d).forEach(function(key){
        p.append(key, this[key]);
    }, d);
    return p
}

let data = {
  'param1': 'value1',
  'param2': 'value2',
}

let p = axqs(data)
axios.post('/foo', p)

原文由 Exis 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题