Axios 作为 JSON 对象发布,如何更改

2022-08-30 19:19:41

正如标题所述,当您执行

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

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

有没有办法改变这一点?我也尝试过更改,但这无济于事。content-type


答案 1

以下是github axios页面上的解释:

默认情况下,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);

答案 2