JavaScript实现图片伪异步上传过程解析


Posted in Javascript onApril 10, 2020

实现逻辑

首先要知道, ajax无法发送带有文件的post请求所以,所以还是要用同步的方式,但是刷新的时候,我们不要在原来的页面刷新,去一个隐藏的iframe里面刷新,form表单中action正常填写处理文件上传的操作。紧着着的target填写一个隐藏的iframe。 这样表单提交之后,文件会被上传,被刷新页面为隐藏的iframe,因此用户看到的效果和ajax处理的效果是一样的。

dom结构

在这里有两个需要注意的地方,一是iframe是隐藏的,对用户不可见。二是form的target属性就是iframe的id属性,必须确保这个地方的一致,否则获取不到服务器的回传地址

<form action="#" method="post" enctype="multipart/form-data" target="hidden_frame" id='upload'>
<input type="file" name="pic" accept="image/gif;image/jpg;" />
</form>
<iframe style="display:none" name='hidden_frame' id="hidden_frame" style='display:none'></iframe>

图片预览

一般在图片上传之前,我们希望用户可以预览到上传之后的样子,这里有两种处理方式。一个是等图片上传成功之后,服务器返回图片的地址,将图片显示,由于中间的时间差很小,给用户一种错觉好像真的是在预览。第二种方式是在图片上传之前,获取input中的本地图片地址,然后显示,由于是显示本地的图片,所以没有时间差,实现真正的预览。简单的逻辑逻辑代码如下

$("#userHeadImg").change(function(event) {          
   var file = $(event.target)[0].files[0];
   var src = URL.createObjectURL(file);
   if(file){
    //表示获取到了图片
   }else{
    //表示点击了取消
   }
   //这里的src就是图片的地址,将它放在任意一个img标签的src属性里面   
});

开始上传

在onchange事件里面促发form的submit事件,上传图片

$("#upload").submit();

获取服务器回传的图片url

服务器将地址返回到iframe,iframe会被刷新。使用js监听iframe的onload,一旦有onload发生,就表示服务器回传了信息

var imgsrc=$(this).contents().find("pre").text();

增加上传文件类型限制

accept="image/gif;image/jpg;"

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

Javascript 相关文章推荐
javascript Prototype 对象扩展
May 15 Javascript
理解Javascript_02_理解undefined和null
Oct 11 Javascript
Dom 结点创建 基础知识
Oct 01 Javascript
JavaScript如何自定义trim方法
Jul 28 Javascript
详解javascript遍历方式
Nov 11 Javascript
6种javascript显示当前系统时间代码
Dec 01 Javascript
chrome下判断点击input上标签还是其余标签的实现方法
Sep 18 Javascript
JavaScript无阻塞加载和defer、async详解
Feb 26 Javascript
基于JavaScript实现的快速排序算法分析
Apr 14 Javascript
微信小程序项目实践之验证码倒计时功能
Jul 18 Javascript
Node.js web 应用如何封装到Docker容器中
Sep 01 Javascript
springboot+vue实现文件上传下载
Nov 17 Vue.js
Vue实现Layui的集成方法步骤
Apr 10 #Javascript
如何基于layui的laytpl实现数据绑定的示例代码
Apr 10 #Javascript
vue-drag-chart 拖动/缩放图表组件的实例代码
Apr 10 #Javascript
vue+vant使用图片预览功能ImagePreview的问题解决
Apr 10 #Javascript
JS实现省市县三级下拉联动
Apr 10 #Javascript
JavaScript实现简单的图片切换功能(实例代码)
Apr 10 #Javascript
TypeScript的安装、使用、自动编译的实现
Apr 10 #Javascript
You might like
PHP在XP下IIS和Apache2服务器上的安装
2006/09/05 PHP
PHP遍历XML文档所有节点的方法
2015/03/12 PHP
PHP微信API接口类
2016/08/22 PHP
用倒置滤镜把div倒置,再把table倒置。
2007/07/31 Javascript
jquery+ajax每秒向后台发送请求数据然后返回页面的代码
2011/01/17 Javascript
jQuery 阴影插件代码分享
2012/01/09 Javascript
Javascript核心读书有感之语言核心
2015/02/01 Javascript
JavaScript中的setUTCDate()方法使用详解
2015/06/11 Javascript
2016年最热门的15 款代码语法高亮工具,美化你的代码
2016/01/06 Javascript
jQuery获得字体颜色16位码的方法
2016/02/20 Javascript
深入理解JS中的substr和substring
2016/04/26 Javascript
浅谈js的ajax的异步和同步请求的问题
2016/10/07 Javascript
JavaScript输出所选择起始与结束日期的方法
2017/07/12 Javascript
Bootstrap一款超好用的前端框架
2017/09/25 Javascript
Node.js实现mysql连接池使用事务自动回收连接的方法示例
2018/02/03 Javascript
Angular2 自定义表单验证器的实现方法
2018/12/14 Javascript
微信小游戏之使用three.js 绘制一个旋转的三角形
2019/06/10 Javascript
jQuery 添加元素和删除元素的方法
2020/07/15 jQuery
[01:04:48]VGJ.S vs TNC Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
Django框架使用富文本编辑器Uedit的方法分析
2018/07/31 Python
利用python将图片版PDF转文字版PDF
2019/05/03 Python
python批量将excel内容进行翻译写入功能
2019/10/10 Python
Pytorch上下采样函数--interpolate用法
2020/07/07 Python
详解python实现可视化的MD5、sha256哈希加密小工具
2020/09/14 Python
python 基于selenium实现鼠标拖拽功能
2020/12/24 Python
python Protobuf定义消息类型知识点讲解
2021/03/02 Python
捷克钓鱼用品网上商店:Parys.cz
2018/06/15 全球购物
联想英国官网:Lenovo英国
2019/07/17 全球购物
联想C++笔试题
2012/06/13 面试题
比较一下entity bean和session bean
2013/12/27 面试题
预备党员学习十八届三中全会精神思想汇报
2014/09/13 职场文书
神农溪导游词
2015/02/11 职场文书
美德少年主要事迹材料
2015/11/04 职场文书
2016公务员年度考核评语
2015/12/01 职场文书
小米11和iphone12哪个值得买?小米11对比iphone12评测
2021/04/21 数码科技
Python机器学习应用之工业蒸汽数据分析篇详解
2022/01/18 Python