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

时间:2017-01-05 23:33:19

标签: javascript php reactjs axios

正如标题所述,当你做

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,但这没有用。

2 个答案:

答案 0 :(得分:6)

axios使用JSON作为默认内容类型。

this URL中,您可以找到针对此问题的几种解决方法和解决方案。

答案 1 :(得分:2)

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);