axios.js提交表单数据的解决办法

axios因为小巧而性能强大受到很多人的追捧,但是其默认的数据提交方式为Payload,这样给后台解析带来了较大的困扰,因为难以从Request中获取到参数,所以默认的数据对象拼装无法成功 ,尤其是采用Spring MVC的@ModalAttribute注解时(没有使用@RequestBody注解)。表单数据与Payload数据之间的差异请参见$.ajax使用总结(一):Form提交与Payload提交

解决方法如下:
1. 修改头部信息,将Content-Type改为“application/x-www-form-urlencoded”; charset=UTF-8”;
2. 将数据进行“form-urlencoded”编码;

编码的库采用官方推荐的Qs,可用如下命令直接安装:

npm install qs --save

以Form提交的代码实现如下:

//  首先进行url编码
var data =  Qs.stringify({
    firstName: 'yiifaa',
    lastName: '@163.com'
});
//  提交数据
axios({
      method: 'post',
      url: '/user/12345',
      //    必不可少,修改数据的提交方式
      headers : {
          "Content-Type":'application/x-www-form-urlencoded; charset=UTF-8'
      },
      data
});

如果存在数据的级联与数组情况,假定要传输的数据如下;

{
    date : {
        startTime : '2017-07-07'
    },
    names : ['yiifaa', 'yiifee']
}

那么需要加入以下参数:

var data =  Qs.stringify({
    date : {
        startTime : '2017-07-07'
    },
    names : ['yiifaa', 'yiifee']
},
    //  加入JS对象转换配置
    {allowDots: true});

最后提交Form Data的效果如下:

date.startTime:2017-07-07
names[0]:yiifaa
names[1]:yiifee

刚好是Spring MVC要求的数据格式。

结论

利用”Content-Type”与qs库可轻松解决axios.js提交表单数据的难题,强烈建议不要轻易使用params参数,尤其是在执行POST提交时,它们之间的区别参见浏览器查询参数与表单数据的优先级问题

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值