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 相关文章推荐
javascript实现的网页局布刷新效果
Dec 01 Javascript
JS 删除字符串最后一个字符的实现代码
Feb 20 Javascript
JS实现根据当前文字选择返回被选中的文字
May 21 Javascript
javascript适合移动端的日期时间拾取器
Nov 10 Javascript
JQuery标签页效果实例详解
Dec 24 Javascript
分享javascript实现的冒泡排序代码并优化
Jun 05 Javascript
微信小程序 Canvas增强组件实例详解及源码分享
Jan 04 Javascript
11行JS代码制作二维码生成功能
Mar 09 Javascript
AngularJS标签页tab选项卡切换功能经典实例详解
May 16 Javascript
JavaScript中如何对多维数组(矩阵)去重的实现
Dec 04 Javascript
JavaScript 俄罗斯方块游戏实现方法与代码解释
Apr 08 Javascript
javascript实现放大镜功能
Dec 09 Javascript
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
PHP4实际应用经验篇(9)
2006/10/09 PHP
树型结构列出指定目录里所有文件的PHP类
2006/10/09 PHP
php的字符串用法小结
2010/06/08 PHP
php页面消耗内存过大的处理办法
2013/03/18 PHP
windows环境下php配置memcache的具体操作步骤
2013/06/09 PHP
JSON用法之将PHP数组转JS数组,JS如何接收PHP数组
2015/10/08 PHP
关于扩展 Laravel 默认 Session 中间件导致的 Session 写入失效问题分析
2016/01/08 PHP
jQuery操作Select选择的Text和Value(获取/设置/添加/删除)
2013/03/06 Javascript
Javascript Object 对象学习笔记
2014/12/17 Javascript
html的DOM中Event对象onabort事件用法实例
2015/01/21 Javascript
JS实现点击颜色块切换指定区域背景颜色的方法
2015/02/25 Javascript
jQuery实现自定义checkbox和radio样式
2015/07/13 Javascript
jQuery实现对无序列表的排序功能(附demo源码下载)
2016/06/25 Javascript
vue中用动态组件实现选项卡切换效果
2017/03/25 Javascript
详解vue-cli中配置sass
2017/06/21 Javascript
JS实现预加载视频音频/视频获取截图(返回canvas截图)
2017/10/09 Javascript
浅谈React和Redux的连接react-redux
2017/12/04 Javascript
jQuery实现的点击按钮改变样式功能示例
2018/07/21 jQuery
详解vue3.0 diff算法的使用(超详细)
2020/07/01 Javascript
浅谈Vue开发人员的7个最好的VSCode扩展
2021/01/20 Vue.js
python实现跨文件全局变量的方法
2014/07/07 Python
基于python 爬虫爬到含空格的url的处理方法
2018/05/11 Python
python中join()方法介绍
2018/10/11 Python
python爬取淘宝商品销量信息
2018/11/16 Python
python用win32gui遍历窗口并设置窗口位置的方法
2019/07/26 Python
mac使用python识别图形验证码功能
2020/01/10 Python
Python爬虫库requests获取响应内容、响应状态码、响应头
2020/01/25 Python
canvas实现图片马赛克的示例代码
2018/03/26 HTML / CSS
Banana Republic英国官网:香蕉共和国,GAP集团旗下偏贵族风
2018/04/24 全球购物
Jar包的作用是什么
2014/03/30 面试题
致铅球运动员加油稿
2014/02/13 职场文书
公司办公室岗位职责
2014/03/19 职场文书
自习课吵闹检讨书范文
2014/09/26 职场文书
党的群众路线教育实践活动总结
2014/10/30 职场文书
门市房租房协议书
2014/12/04 职场文书
《草虫的村落》教学反思
2016/02/20 职场文书