vue axios post发送复杂对象问题


Posted in Javascript onJune 04, 2019

一、项目情形

现在vue项目中,一般使用axios发送请求去后台拉取数据。

在某些业务场景中,前端需要在某个字段中发送一个复杂的嵌套对象给后台做保存并处理。虽然axios可配置发送方式(post/get等),但如果不做其他配置,post的数据其实也是拼在请求地址后面,而这种传输方式会有很多问题:一是可能数据丢失,二是get传送的数据长度有limit,如果需要保存大段的中文,会报错;三是数据不直观,复杂对象的格式会出现问题。

二、解决方案

怎么实现使用post方法时,能实现formData方式提交,而且整个请求数据格式能像queryString一样直观。

使用QS将数据序列化

//main.js
import axios from 'axios';
Vue.prototype.$axios = axios; // 配置axios的访问方式
//demo.vue
import Qs from qs;
this.$axios({
 method: "post",
 url: "url",
 data: reqData,
 transformRequest: [ function(data){
  return Qs.stringify(data) //使用Qs将请求参数序列化
 }],
 headers: {
  'Content-Type': 'application/x-www-form-urlencoded' //必须设置传输方式
 }
}).then((res)=>{
 //逻辑代码
}

完成第一步后,可以实现post请求了,请求体为formData的格式,但如果reqData是一个对象嵌套数组的复杂对象,form的格式会变得非常不直观。如果此时后台需要将对象整个储存起来,以便下次拉取数据渲染前端页面,则会增加很多额外的转化工作。

//例如obj为一个嵌套多层的复杂对象
let reqData = {
 id: '123',
 status: '1',
 data: {
  innerData: {
   price: "higher",
   amount: "2000",
  },
  outerData: {
   price: "lower",
   amount: "3000"!
  },
  parts: ['123','234','345','456']
 }
}
//参考如上配置,最后请求体中parsed的数据格式会变成如下
![图片描述][1]

对象跟数组的每一项都被拆拼成键值对,数据格式非常不直观,如果后台需要将整个数据保存以便下次取用,会不方便。

可以怎样简单处理一下,让它变得像如下图一的get方法一样参数清晰呢?

vue axios post发送复杂对象问题

只需做一个简单的处理,将复杂对象对象变成字符串,再进行传输。

let data = {
  innerData: {
   price: "higher",
   amount: "2000",
  },
  outerData: {
   price: "lower",
   amount: "3000"!
  },
  parts: ['123','234','345','456']
 },
 reqData = {
  id: '123',
  status: '1',
  data: **JSON.stringify(data)**
 };
this.$axios({
 method: "post",
 url: "url",
 data: reqData,
 transformRequest: [ function(data){
  return Qs.stringify(data) //使用Qs将请求参数序列化
 }],
 headers: {
  'Content-Type': 'application/x-www-form-urlencoded' //必须设置传输方式
 }
}).then((res)=>{
 //逻辑代码
}

这样之后,数据格式变得清晰可读,而且后台可以根据key值直接取出整个对象。我们也可以大方优雅地用vue axios进行post传输啦。

vue axios post发送复杂对象问题

总结

以上所述是小编给大家介绍的vue axios post发送复杂对象问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
JQuery 选择和过滤方法代码总结
Nov 19 Javascript
jQuery使用动态渲染表单功能完成ajax文件下载
Jan 15 Javascript
Javascript中浮点数相乘的一个解决方法
Jun 03 Javascript
删除条目时弹出的确认对话框
Jun 05 Javascript
Javascript基础教程之数组 array
Jan 18 Javascript
Javascript中字符串replace方法的第二个参数探究
Dec 05 Javascript
jQuey将序列化对象在前台显示地实现代码(方法总结)
Dec 13 Javascript
基于jQuery实现的Ajax 验证用户名唯一性实例代码
Jun 28 jQuery
Angular实现的敏感文字自动过滤与提示功能示例
Dec 29 Javascript
vue+elementUI实现表单和图片上传及验证功能示例
May 14 Javascript
如何使用Jquery动态生成二级选项列表
Feb 06 jQuery
如何vue使用el-table遍历循环表头和表体数据
Apr 26 Vue.js
vue 2.5.1 源码学习 之Vue.extend 和 data的合并策略
Jun 04 #Javascript
vue实现分环境打包步骤(给不同的环境配置相对应的打包命令)
Jun 04 #Javascript
JavaScript实现页面中录音功能的方法
Jun 04 #Javascript
vue elementUI 表单校验功能之数组多层嵌套
Jun 04 #Javascript
小程序根据手机机型设置自定义底部导航距离
Jun 04 #Javascript
js回文数的4种判断方法示例
Jun 04 #Javascript
Vue对象赋值视图不更新问题及解决方法
Jun 03 #Javascript
You might like
php编写的一个E-mail验证类
2015/03/25 PHP
用jquery来定位
2007/02/20 Javascript
Javascript 设计模式(二) 闭包
2010/05/26 Javascript
让人期待的2011年度最佳 jQuery 插件分享
2012/03/16 Javascript
详解Wondows下Node.js使用MongoDB的环境配置
2016/03/01 Javascript
ichart.js绘制虚线、平均分虚线效果的实现代码
2016/05/05 Javascript
D3.js实现折线图的方法详解
2016/09/21 Javascript
正则 js分转元带千分符号详解
2017/03/08 Javascript
jQuery+ajax实现修改密码验证功能实例详解
2017/07/06 jQuery
vue 兄弟组件的信息传递的方法实例详解
2019/08/30 Javascript
微信小程序按钮点击动画效果的实现
2019/09/04 Javascript
在weex中愉快的使用scss的方法步骤
2020/01/02 Javascript
VUE子组件向父组件传值详解(含传多值及添加额外参数场景)
2020/09/01 Javascript
从零开始用webpack构建一个vue3.0项目工程的实现
2020/09/24 Javascript
[01:19:11]Ti4 循环赛第二日 NaVi.us vs iG
2014/07/11 DOTA
[02:23]2018DOTA2亚洲邀请赛趣味视频——反应测试
2018/04/04 DOTA
python字符串排序方法
2014/08/29 Python
跟老齐学Python之使用Python操作数据库(1)
2014/11/25 Python
Python结巴中文分词工具使用过程中遇到的问题及解决方法
2017/04/15 Python
Python List cmp()知识点总结
2019/02/18 Python
Python绘图Matplotlib之坐标轴及刻度总结
2019/06/28 Python
python命令行工具Click快速掌握
2019/07/04 Python
解决windows上安装tensorflow时报错,“DLL load failed: 找不到指定的模块”的问题
2020/05/20 Python
加拿大拼图大师:Puzzle Master
2020/12/28 全球购物
八年级历史教学反思
2014/01/10 职场文书
致400米运动员广播稿
2014/02/07 职场文书
最新奶茶店创业计划书范文
2014/02/08 职场文书
致垒球运动员加油稿
2014/02/16 职场文书
《雪地里的小画家》教学反思
2014/02/22 职场文书
党员教师工作决心书
2014/03/13 职场文书
关于安全的标语
2014/06/10 职场文书
化工实习心得体会
2014/09/09 职场文书
购房公证委托书(2014版)
2014/09/12 职场文书
django上传文件的三种方式
2021/04/29 Python
Pycharm远程调试和MySQL数据库授权问题
2022/03/18 MySQL
vue-treeselect的基本用法以及解决点击无法出现拉下菜单
2022/04/30 Vue.js