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的表格排序
Sep 11 Javascript
基于Jquery 解决Ajax请求的页面 浏览器后退前进功能,页面刷新功能实效问题
Dec 11 Javascript
一个JQuery写的点击上下滚动的小例子
Aug 27 Javascript
jQuery获取(选中)单选,复选框,下拉框中的值
Feb 21 Javascript
简单了解Backbone.js的Model模型以及View视图的源码
Feb 14 Javascript
完善的jquery处理机制
Feb 21 Javascript
js 判断附件后缀的简单实现方法
Oct 11 Javascript
谈谈jQuery之Deferred源码剖析
Dec 19 Javascript
vue环形进度条组件实例应用
Oct 10 Javascript
在微信小程序中保存网络图片
Feb 12 Javascript
js实现ajax的用户简单登入功能
Jun 18 Javascript
原生JS实现pc端轮播图效果
Dec 21 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
php smarty模版引擎中变量操作符及使用方法
2009/12/11 PHP
PHP仿盗链代码
2012/06/03 PHP
在smarty中调用php内置函数的方法
2013/02/07 PHP
基于MySQL体系结构的分析
2013/05/02 PHP
php模仿asp Application对象在线人数统计实现方法
2015/01/04 PHP
又拍云异步上传实例教程详解
2016/04/19 PHP
PHP简单日历实现方法
2016/07/20 PHP
Laravel框架实现的rbac权限管理操作示例
2019/01/16 PHP
Laravel 自动转换长整型雪花 ID 为字符串的实现
2020/10/27 PHP
jquery动态加载图片数据练习代码
2011/08/04 Javascript
javascript 小数取整简单实现方式
2014/05/30 Javascript
Javascript中的异步编程规范Promises/A详细介绍
2014/06/06 Javascript
使表格的标题列可左右拉伸jquery插件封装
2014/11/24 Javascript
JavaScript三元运算符的多种使用技巧
2015/04/16 Javascript
jQuery实现表格行上移下移和置顶的方法
2015/05/22 Javascript
javascript中undefined与null的区别
2015/08/16 Javascript
使用jQuery处理AJAX请求的基础学习教程
2016/05/10 Javascript
JS实现用户注册时获取短信验证码和倒计时功能
2016/10/27 Javascript
jQuery表单元素选择器代码实例
2017/02/06 Javascript
js 提取某()特殊字符串长度的实例
2017/12/06 Javascript
@angular前端项目代码优化之构建Api Tree的方法
2018/12/24 Javascript
Python操作MySQL简单实现方法
2015/01/26 Python
python中dir函数用法分析
2015/04/17 Python
Django框架中方法的访问和查找
2015/07/15 Python
Python使用wxPython实现计算器
2018/01/30 Python
对python判断是否回文数的实例详解
2019/02/08 Python
三步实现Django Paginator分页的方法
2019/06/11 Python
PyTorch在Windows环境搭建的方法步骤
2020/05/12 Python
解决tensorflow模型压缩的问题_踩坑无数,总算搞定
2021/03/02 Python
aec加密 php_php aes加密解密类(兼容php5、php7)
2021/03/14 PHP
为什么要有struct关键字
2012/05/08 面试题
2014年商场超市庆元旦活动方案
2014/02/14 职场文书
小学语文教研活动总结
2014/07/01 职场文书
大学生党员个人对照检查材料范文
2014/09/25 职场文书
MySQL主从复制断开的常用修复方法
2021/04/07 MySQL
pycharm无法安装cv2模块问题
2022/05/20 Python