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 相关文章推荐
与jquery serializeArray()一起使用的函数,主要来方便提交表单
Jan 31 Javascript
ajax中get和post的说明及使用与区别
Dec 23 Javascript
jQuery中用dom操作替代正则表达式
Dec 29 Javascript
以jQuery中$.Deferred对象为例讲解promise对象是如何处理异步问题
Nov 13 Javascript
简单谈谈JavaScript的同步与异步
Dec 31 Javascript
改变checkbox默认选中状态及取值的实现代码
May 26 Javascript
对称加密与非对称加密优缺点详解
Feb 06 Javascript
vue实现表格增删改查效果的实例代码
Jul 18 Javascript
React Native第三方平台分享的实例(Android,IOS双平台)
Aug 04 Javascript
详解webpack提取第三方库的正确姿势
Dec 22 Javascript
vue-cli 脚手架基于Nightwatch的端到端测试环境的过程
Sep 30 Javascript
浅谈vux之x-input使用以及源码解读
Nov 04 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
解决php中Cannot send session cache limiter 的问题的方法
2007/04/27 PHP
查找mysql字段中固定字符串并替换的几个方法
2012/09/23 PHP
php视频拍照上传头像功能实现代码分享
2015/10/08 PHP
PHP 断点续传实例详解
2017/11/11 PHP
学习thinkphp5.0验证类使用方法
2017/11/16 PHP
jQuery TextBox自动完成条
2009/07/22 Javascript
Javascript下判断是否为闰年的Datetime包
2010/10/26 Javascript
JavaScript分析、压缩工具JavaScript Analyser
2014/12/31 Javascript
详解JavaScript基于面向对象之创建对象(2)
2015/12/10 Javascript
jQuery ajax分页插件实例代码
2016/01/27 Javascript
jQuery遍历json的方法分析
2016/04/16 Javascript
Javascript 制作图形验证码实例详解
2016/12/22 Javascript
canvas快速绘制圆形、三角形、矩形、多边形方法介绍
2016/12/29 Javascript
微信小程序实现带刻度尺滑块功能
2017/03/29 Javascript
Angular 4.0学习教程之架构详解
2017/09/12 Javascript
微信小程序出现wx.navigateTo页面不跳转问题的解决方法
2017/12/26 Javascript
vue里面父组件修改子组件样式的方法
2018/02/03 Javascript
vscode中eslint插件的配置(prettier配置无效)
2019/09/10 Javascript
layui 实现加载动画以及非真实加载进度的方法
2019/09/23 Javascript
[02:51]2014DOTA2国际邀请赛 IG战队官方纪录片
2014/07/21 DOTA
在Lighttpd服务器中运行Django应用的方法
2015/07/22 Python
Python标准模块--ContextManager上下文管理器的具体用法
2017/11/27 Python
pycharm中成功运行图片的配置教程
2018/10/28 Python
Python Pandas数据结构简单介绍
2019/07/03 Python
django rest framework 实现用户登录认证详解
2019/07/29 Python
解决jupyter notebook import error但是命令提示符import正常的问题
2020/04/15 Python
快速一键生成Python爬虫请求头
2021/03/04 Python
css3弹性盒子flex实现三栏布局的实现
2020/11/12 HTML / CSS
德国奢侈品网上商城:Mytheresa
2016/08/24 全球购物
公司开业庆典主持词
2014/03/21 职场文书
土建专业毕业生自荐书
2014/07/04 职场文书
企业三严三实学习心得体会
2014/10/13 职场文书
七年级上册语文教学计划
2015/01/22 职场文书
工程款催款函
2015/06/24 职场文书
奖学金申请书(范文)
2019/08/14 职场文书
JS 4个超级实用的小技巧 提升开发效率
2021/10/05 Javascript