Vue 使用formData方式向后台发送数据的实现


Posted in Javascript onApril 14, 2019

很多时候在使用form向后台发送数据的时候,并不需要使用到表单组件。

例如时间戳、ip等,这个时候除了ajax之外,还可以使用HTML5的一个全新方法FormData;在input[type = file]的文件类型中,很多时候想要把一张图片或者是使用canvas绘制好的图像传送到后台时,无法赋值给file文件,只能转换为base64类型传送到后台,然后由后台转换为图片再进行服务器存储;此过程较为复杂;

使用formdata,只需创建新的formdata对象,将要发送的数据添加进去,后台即可接收;数据以及文件对象皆可;

1. 基本使用方式

template

<input class="file" name="file" type="file" accept="image/png,image/gif,image/jpeg" @change="update"/>

JavaScript

update (e) {
  let file = e.target.files[0]
  // console.log(file)
  let param = new FormData() // 创建form对象
  param.append('file', file, file.name) // 通过append向form对象添加数据
  param.append('id', this.$store.state.userId) // 添加form表单中其他数据
   // withCredentials: true 使得后台可以接收表单数据 跨域请求
  const instance = axios.create({
    withCredentials: true
  })
  // url为后台接口
  instance.post('url', param)
    .then(this.succ) // 成功返回信息 调用函数 函数需自己定义,此处后面省略
    .catch(this.serverError) // 服务器错误 调用对应函数 函数需自己定义,此处后面省略
}

2. 美化 input file 按钮 (拓展)

思路:

  1. 简单粗暴地隐藏:opacity: 0;
  2. 在 <input class="file"> 元素节点的位置上创建一个好看的元素节点,比如img
  3. 将 <input class="file"> 元素的z轴变高,使得其覆盖<img/> :z-index: 5;
  4. 因为 <input class="file"> 是透明的,那么我们就只看见它同xy上的好看的<img />
  5. 点击这个好看的<img /> 其实是点击了它上层的表单

以上思路可以实现点击用户头像,通过表单上传更换头像,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js实现简单登录功能的实例代码
Nov 09 Javascript
如何实现textarea里的不同文本显示不同颜色
Jan 20 Javascript
[原创]推荐10款最热门jQuery UI框架
Aug 19 Javascript
AngularJS中的模块详解
Jan 29 Javascript
JS实现黑客帝国文字下落效果
Sep 01 Javascript
手把手教你搭建ES6的开发运行环境
Jul 11 Javascript
Angular4学习之Angular CLI的安装与使用教程
Jan 04 Javascript
vue.js图片转Base64上传图片并预览的实现方法
Aug 02 Javascript
在element-ui的el-tree组件中用render函数生成el-button的实例代码
Nov 05 Javascript
Vue批量图片显示时遇到的路径被解析问题
Mar 28 Javascript
Vue+Django项目部署详解
May 30 Javascript
vue 强制组件重新渲染(重置)的两种方案
Oct 29 Javascript
说说如何使用Vuex进行状态管理(小结)
Apr 14 #Javascript
基于Vue2-Calendar改进的日历组件(含中文使用说明)
Apr 14 #Javascript
浅谈Vue页面级缓存解决方案feb-alive(上)
Apr 14 #Javascript
vue 实现小程序或商品秒杀倒计时
Apr 14 #Javascript
js中async函数结合promise的小案例浅析
Apr 14 #Javascript
详解Vue-cli3 项目在安卓低版本系统和IE上白屏问题解决
Apr 14 #Javascript
Vue入门学习笔记【基本概念、对象、过滤器、指令等】
Apr 13 #Javascript
You might like
NO3第三帝国留言簿制作过程
2006/10/09 PHP
php对包含html标签的字符串进行截取的函数分享
2014/06/19 PHP
php实现xml转换数组的方法示例
2017/02/03 PHP
解决PHP 7编译安装错误:cannot stat ‘phar.phar’: No such file or directory
2017/02/25 PHP
跨浏览器的 mouseenter mouseleave 以及 compareDocumentPosition的使用说明
2010/05/04 Javascript
jquery的ajax请求全面了解
2013/03/20 Javascript
JQuery验证jsp页面属性是否为空(实例代码)
2013/11/08 Javascript
jquery.autocomplete修改实现键盘上下键自动填充示例
2013/11/19 Javascript
解决jQuery动态获取手机屏幕高和宽的问题
2014/05/07 Javascript
使用AngularJS来实现HTML页面嵌套的方法
2015/06/17 Javascript
JS+CSS实现分类动态选择及移动功能效果代码
2015/10/19 Javascript
对象题目的一个坑 理解Javascript对象
2015/12/22 Javascript
Angular将填入表单的数据渲染到表格的方法
2017/09/22 Javascript
JS兼容所有浏览器的DOMContentLoaded事件
2018/01/12 Javascript
vue2.0 实现导航守卫(路由守卫)
2018/05/21 Javascript
NodeJs项目中关闭ESLint的方法
2018/08/09 NodeJs
Node4-5静态资源服务器实战以及优化压缩文件实例内容
2019/08/29 Javascript
layui 对table中的数据进行转义的实例
2019/09/12 Javascript
vue学习笔记之Vue中css动画原理简单示例
2020/02/29 Javascript
在vue中使用Echarts利用watch做动态数据渲染操作
2020/07/20 Javascript
用javascript实现倒计时效果
2021/02/09 Javascript
[12:21]VICI vs TNC (BO3)
2018/06/07 DOTA
[01:02:30]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第三场 8.22
2019/09/05 DOTA
linux系统使用python获取内存使用信息脚本分享
2014/01/15 Python
pandas计算最大连续间隔的方法
2019/07/04 Python
Django-Model数据库操作(增删改查、连表结构)详解
2019/07/17 Python
基于python实现数组格式参数加密计算
2020/04/21 Python
python支持多继承吗
2020/06/19 Python
Emporio Armani腕表天猫官方旗舰店:乔治·阿玛尼为年轻人设计的副线品牌
2017/07/02 全球购物
德国50岁以上交友网站:Lebensfreunde
2020/03/18 全球购物
评析教师个人的自我评价
2014/02/19 职场文书
个人充满哲理的自我评价
2014/02/20 职场文书
施工安全责任协议书
2016/03/23 职场文书
检讨书格式
2019/04/25 职场文书
Go调用Rust方法及外部函数接口前置
2022/06/14 Golang
Android移动应用开发指南之六种布局详解
2022/09/23 Java/Android