在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
FormData是个什么鬼?经过多方搜索调查了解,这个神奇的东西是XMLHttpRequest Level 2 新增的一个对象,于2008年2月提出,可以利用它来提交表单、模拟表单提交,当然最大的优势就是可以上传二进制文件,可以把所有表单元素的name与value组成一个queryString,提交到后台。 划重点: 可以把所有表单元素的name与value组成一个queryString,提交到后台。这不就是后端所谓的转换数据格式,按格式提交呗,前后端分离肯定是异步提交,这个就可以很好的去解决这个问题! 使用也很soeasy 只需要把 form 表单作为参数传入 FormData 构造函数即可! 在vue和axios的配合下实战一波<!-- *.vue组件中的上传组件 我这里使用的是buefy的vue组件 --> <form method="post" enctype="multipart/form-data"> <b-field class="file is-primary" :class="{'has-name': !!file}"> <b-upload v-model="file" class="file-label" @input="getModifyAvatar()"> <span class="file-cta"> <b-icon class="file-icon" icon="upload"></b-icon> <span class="file-label">Click to upload</span> </span> <span class="file-name" v-if="file"> {{ file.name }} </span> </b-upload> </b-field> </form> <script> export default { data(){ return { userInfo: '', // 通过一个get请求把用户相关信息赋值给它 file: null, } }, methods: { // 修改头像 getModifyAvatar(){ const formData = new FormData(); // 构造formData数据 formData.append('avatar', this.file) // 提交put请求 getModifyInfo(formData).then(res => { this.userInfo.avatar = res.data.avatar }) }, } } </script> // api.js // 这是我封装的全局请求方法 import { request } from '../network/request' // 修改用户头像 export const getModifyInfo = (params) => { return request({ url: 've_register/1/', method: 'put', headers: { 'Content-Type': 'multipart/form-data' }, data: params }) } 看以上代码,注意发送请求的时候一定要设置请求头header,如上所示,html表单form中也需要设置下enctype="multipart/form-data" 否则也是不行的! 通过上面的例子我们目前只用到了FormData的append()方法,网上大部分关于 FormData 介绍的文章都只提到了append()方法,那么FormData 对象到底有些什么方法呢?其实我们console 一下就知道了: console 之后我们有重大的发现,FormData 对象竟然有这么多方法,所以还是自己测试才能发现真相,下面就对这些方法一一进行讲解: append()
|
请发表评论