IE9 elementUI文件上传的问题解决


Posted in Javascript onOctober 17, 2018

问题: IE9中无法使用FormData

思路

  • 基于上面的问题,需要使用form表单上传文件
  • form表单上传会引起页面的刷新,因此需要动态添加一个iframe来避免页面刷新
  • from表单上传之后需要调用回调,此时需要监听iframe的onload事件

  • 文件上传之后的返回值 Content-Type值不能是application/json 这会导致IE去解析返回结果,最终调用文件的保存或者打开,此处需要与后端协商将Content-Type改为text/plain
  • 如果需要图片回显,回显的图片路径中有有query参数,如果有多个参数会出现&,但是返回结果显示在iframe中所以&会被当做HTML解析为&所以回显之前需要将此处转换回来

问题解决

项目使用VUE编写,UI是ElementUI,但是Element官方明确了upload方面是不支持IE9的,看源码的意思是已经搁置了iframe上传的后续开发

改用vue-upload-component 作者对IE9专门做了兼容,就是使用起来理解成本有点儿高

如何触发上传

通过ref获取upload实例,在添加文件时 激活上传

this.$refs.upload.active = true

如何判断当前上传的状态(添加,更新,删除,上传成功,上传失败)

每次上传的状态变化时 都会调用@input-file绑定的回调,形参是newFile, oldFile,通过新旧文件的对比来得到当前的状态,感觉有点儿反策略模式的意思,自己通过元状态的组合来得到当前状态,习惯的话觉得还是挺有意思的

inputFile(newFile, oldFile) {
 // 旧文件活跃 新文件不活跃 此时上传过程完成
 if (newFile && oldFile && !newFile.active && oldFile.active) {
  this.$refs.upload.active = false
  // 获得相应数据
  let res = '{}'
  // 此处判断相对简单,可以参考jquery.form.js中做的判断
  if (/<pre/.test(newFile.response)) {
   res = />(.*)</.exec(newFile.response)[1]
  }
  res = JSON.parse(res)
  if (res.code !== 200) {
   if (res.code === 402) {
    this.$route.push('/login')
    return
   }
   Message.error(res.message)
  } else {
   Message.success('上传成功')
   // 回显图片
   this.upload.url = res.data.url.replace(/&/g, '&')
  }
  if (newFile.xhr) {
   // 获得响应状态码
   console.log('status', newFile.xhr.status)
  }
 }
 // 添加文件
 if (newFile && !oldFile) {
  this.$refs['upload' + this.index].active = true
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript-Mozilla和IE中的一个函数直接量的问题
Jan 09 Javascript
JavaScript中:表达式和语句的区别[译]
Sep 17 Javascript
php 中序列化和json使用介绍
Jul 08 Javascript
JavaScript如何自定义trim方法
Jul 28 Javascript
浅谈JavaScript对象与继承
Jul 10 Javascript
Angular 2父子组件之间共享服务通信的实现
Jul 04 Javascript
form表单序列化详解(推荐)
Aug 15 Javascript
JavaScript中常见内置函数用法示例
May 14 Javascript
关于单文件组件.vue的使用
Sep 20 Javascript
pageGroup.js实现分页功能
Jul 27 Javascript
在vue中利用全局路由钩子给url统一添加公共参数的例子
Nov 01 Javascript
jQuery实现简单评论区功能
Oct 26 jQuery
vue src动态加载请求获取图片的方法
Oct 17 #Javascript
node实现分片下载的示例代码
Oct 17 #Javascript
在小程序开发中使用npm的方法
Oct 17 #Javascript
浅谈HTTP 缓存的那些事儿
Oct 17 #Javascript
使用angular-cli webpack创建多个包的方法
Oct 16 #Javascript
element-ui的回调函数Events的用法详解
Oct 16 #Javascript
基于vue-upload-component封装一个图片上传组件的示例
Oct 16 #Javascript
You might like
PHP中$_SERVER的详细参数与说明介绍
2013/10/26 PHP
PHP中4个加速、缓存扩展的区别和选用建议
2014/03/12 PHP
单台服务器的PHP进程之间实现共享内存的方法
2014/06/13 PHP
php用户登录之cookie信息安全分析
2016/05/13 PHP
PHP实现将标点符号正则替换为空格的方法
2017/08/09 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
JavaScript异步编程:异步数据收集的具体方法
2013/08/19 Javascript
JavaScript中操作Mysql数据库实例
2015/04/02 Javascript
JavaScript使用Math.Min返回两个数中较小数的方法
2015/04/06 Javascript
JavaScript中获取纯正的undefined的方法
2016/03/06 Javascript
Angular.js如何从PHP读取后台数据
2016/03/24 Javascript
微信小程序 选择器(时间,日期,地区)实例详解
2016/11/16 Javascript
Three.js基础部分学习
2017/01/08 Javascript
javascript 动态生成css代码的两种方法
2017/03/17 Javascript
详解用webpack把我们的业务模块分开打包的方法
2017/07/20 Javascript
vue组件表单数据回显验证及提交的实例代码
2018/08/30 Javascript
JS中使用cavas截图网页并解决跨域及模糊问题
2018/11/13 Javascript
[10:28]2018DOTA2国际邀请赛寻真——VGJ.S寻梦之路
2018/08/15 DOTA
Python中的pass语句使用方法讲解
2015/05/14 Python
在Django的form中使用CSS进行设计的方法
2015/07/18 Python
深入理解python中的浅拷贝和深拷贝
2016/05/30 Python
Python自然语言处理之词干,词形与最大匹配算法代码详解
2017/11/16 Python
pandas 两列时间相减换算为秒的方法
2018/04/20 Python
浅谈Python编程中3个常用的数据结构和算法
2019/04/30 Python
python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析
2019/09/05 Python
HTML5+JS实现俄罗斯方块原理及具体步骤
2013/11/29 HTML / CSS
应聘医药代表职位求职信
2013/10/21 职场文书
毕业生文员求职信
2013/11/03 职场文书
一句话工作感言
2014/03/01 职场文书
小学生学习感言
2014/03/10 职场文书
乡镇爱国卫生月活动总结
2014/06/25 职场文书
三好学生先进事迹材料
2014/08/28 职场文书
面试感谢信范文
2015/01/22 职场文书
项目战略合作意向书
2015/05/08 职场文书
四年级数学教学反思
2016/02/16 职场文书
Golang 遍历二叉树
2022/04/19 Golang