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 Excel操作知识点
Apr 24 Javascript
js 异步处理进度条
Apr 01 Javascript
ymPrompt的doHandler方法来实现获取子窗口返回值的方法
Jun 25 Javascript
使用jquery为table动态添加行的实现代码
Mar 30 Javascript
ASP.NET jQuery 实例13 原创jQuery文本框字符限制插件-TextArea Counter
Feb 03 Javascript
JS控制表单提交的方法
Jul 09 Javascript
js仿网易表单及时验证功能
Mar 07 Javascript
jQuery事件_动力节点Java学院整理
Jul 05 jQuery
Vue的土著指令和自定义指令实例详解
Feb 04 Javascript
通过vue手动封装on、emit、off的代码详解
May 29 Javascript
Vue CLI3基础学习之pages构建多页应用
Jun 02 Javascript
vue实现倒计时功能
Mar 24 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写入数据库类代码分享
2011/07/26 PHP
PHP加Nginx实现动态裁剪图片方案
2014/03/10 PHP
WordPress中注册菜单与调用菜单的方法详解
2015/12/18 PHP
Yii 2.0自带的验证码使用经验分享
2017/06/19 PHP
PHP封装的PDO数据库操作类实例
2017/06/21 PHP
javascript 表单规则集合对象
2009/07/21 Javascript
jQuery中获取Radio元素值的方法
2013/07/02 Javascript
js拼接html注意问题示例探讨
2014/07/14 Javascript
js调试工具console.log()方法查看js代码的执行情况
2014/08/08 Javascript
Bootstrap表单布局
2016/07/19 Javascript
解析JavaScript数组方法reduce
2016/12/12 Javascript
详解jQuery简单的表单应用
2016/12/16 Javascript
JavaScript 值类型和引用类型的初次研究(推荐)
2017/07/19 Javascript
JS实现的简单拖拽购物车功能示例【附源码下载】
2018/01/03 Javascript
JS实现点击下拉菜单把选择的内容同步到input输入框内的实例
2018/01/23 Javascript
浅谈Vue CLI 3结合Lerna进行UI框架设计
2019/04/14 Javascript
Webpack中loader打包各种文件的方法实例
2019/09/03 Javascript
jQuery实现飞机大战小游戏
2020/07/05 jQuery
解决VUEX的mapState/...mapState等取值问题
2020/07/24 Javascript
[00:36]DOTA2上海特级锦标赛 LGD战队宣传片
2016/03/04 DOTA
使用Python的Treq on Twisted来进行HTTP压力测试
2015/04/16 Python
使用Python的内建模块collections的教程
2015/04/28 Python
python生成ppt的方法
2018/06/07 Python
python3转换code128条形码的方法
2019/04/17 Python
python3射线法判断点是否在多边形内
2019/06/28 Python
Python之Sklearn使用入门教程
2021/02/19 Python
浅析Python模块之间的相互引用问题
2021/02/26 Python
HTML5有哪些新特征
2015/12/01 HTML / CSS
Jo Malone美国官网:祖玛珑香水
2017/03/27 全球购物
集世界奢侈品和设计师品牌的意大利精品买手店:Tessabit
2019/08/17 全球购物
私人房屋买卖协议书
2014/10/04 职场文书
婚庆开业庆典主持词
2015/06/30 职场文书
公安干警正风肃纪心得体会
2016/01/15 职场文书
mysql外连接与内连接查询的不同之处
2021/06/03 MySQL
MySQL实现配置主从复制项目实践
2022/03/31 MySQL
Go微服务项目配置文件的定义和读取示例详解
2022/06/21 Golang