【问题标题】:Axios posts as JSON object, how to changeaxios 发布为 JSON 对象,如何更改
【发布时间】:2017-05-20 16:15:20
【问题描述】:

正如标题所说,当你做一个

axios.post('/user', {
    firstName: 'Fred',
    lastName: 'Flintstone'
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

数据将在 JSON 对象中,因此不会被 $_REQUEST 检测到,只能在 php://input 中找到。

有什么办法可以改变吗?我也尝试过更改content-type,但这没有帮助。

【问题讨论】:

  • axios 使用 JSON 作为默认内容类型。在this URL 中,您可以找到针对此问题的多种变通方法和解决方案。
  • 我明天试一下,告诉你结果
  • 好吧,只要它有帮助:)
  • -1 因为 HTTP 标头不区分大小写;见stackoverflow.com/questions/5258977/…
  • @KBoek 是的,根据 RFC 定义,它们不是,但在我回答时,使用这个库的小写标题存在问题。我刚刚检查过它,现在它按照 RFC 工作,所以更新了我的答案。谢谢你告诉我!

标签: javascript php reactjs axios


【解决方案1】:

这是github axios page上的解释:

默认情况下,axios 将 JavaScript 对象序列化为 JSON。要改为以 application/x-www-form-urlencoded 格式发送数据,您可以使用以下选项之一。

浏览器

在浏览器中,您可以按如下方式使用 URLSearchParams API:

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

请注意,并非所有浏览器都支持 URLSearchParams(请参阅 caniuse.com),但有可用的 polyfill(确保 polyfill 全局环境)。

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

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

或者以另一种方式(ES6)

import qs from 'qs';
const data = { 'bar': 123 };
const options = {
  method: 'POST',
  headers: { 'content-type': 'application/x-www-form-urlencoded' },
  data: qs.stringify(data),
  url,
};
axios(options);

【讨论】:

    猜你喜欢
    • 2022-01-27
    • 1970-01-01
    • 1970-01-01
    • 2017-12-15
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    • 2021-11-15
    相关资源
    最近更新 更多