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 Array.remove() 数组删除
Aug 06 Javascript
javascript操作符&quot;!~&quot;详解
Feb 10 Javascript
jQuery实现按钮的点击 全选/反选 单选框/复选框 文本框 表单验证
Jun 25 Javascript
JQuery点击行tr实现checkBox选中的简单实例
May 26 Javascript
又一款js时钟!transform实现时钟效果
Aug 15 Javascript
vue中,在本地缓存中读写数据的方法
Sep 21 Javascript
JavaScript循环遍历你会用哪些之小结篇
Sep 28 Javascript
Vuex新手的理解与使用详解
May 31 Javascript
8 个有用的JS技巧(推荐)
Jul 03 Javascript
微信小程序tabBar设置实例解析
Nov 14 Javascript
jquery实现商品sku多属性选择功能(商品详情页)
Dec 20 jQuery
Vue打包部署到Nginx时,css样式不生效的解决方式
Aug 03 Javascript
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验证手机号码
2015/11/11 PHP
PHP获取访问页面HTTP状态码的实现代码
2016/11/03 PHP
Laravel5.0+框架邮件发送功能实现方法图文与实例详解
2019/04/23 PHP
如何使用jquery动态加载js,css文件实现代码
2013/04/03 Javascript
jQuery contains过滤器实现精确匹配使用方法
2013/04/12 Javascript
Js日期选择器并自动加入到输入框中示例代码
2013/08/02 Javascript
用jquery实现的一个超级简单的下拉菜单
2014/05/18 Javascript
jQuery中queue()方法用法实例
2014/12/29 Javascript
学习JavaScript编程语言的8张思维导图分享
2015/03/27 Javascript
Javascript实现检测客户端类型代码封包
2015/12/03 Javascript
jQuery的each循环用法简单示例
2016/06/12 Javascript
Vue.js 2.0 移动端拍照压缩图片预览及上传实例
2017/04/27 Javascript
JavaScript事件处理程序详解
2017/09/19 Javascript
AngularJs的UI组件ui-Bootstrap之Tooltip和Popover
2018/07/13 Javascript
Vue3.0中的monorepo管理模式的实现
2019/10/14 Javascript
Vuejs中的watch实例详解(监听者)
2020/01/05 Javascript
element日历calendar组件上月、今天、下月、日历块点击事件及模板源码
2020/07/27 Javascript
nuxt 自定义 auth 中间件实现令牌的持久化操作
2020/11/05 Javascript
vue router返回到指定的路由的场景分析
2020/11/10 Javascript
JQuery绑定事件四种实现方法解析
2020/12/02 jQuery
python Crypto模块的安装与使用方法
2017/12/21 Python
PyTorch快速搭建神经网络及其保存提取方法详解
2018/04/28 Python
Python带动态参数功能的sqlite工具类
2018/05/26 Python
Python实现动态添加属性和方法操作示例
2018/07/25 Python
Python 处理图片像素点的实例
2019/01/08 Python
python监控进程状态,记录重启时间及进程号的实例
2019/07/15 Python
python代码区分大小写吗
2020/06/17 Python
python使用建议技巧分享(三)
2020/08/18 Python
Python+Selenium实现自动化的环境搭建的步骤(图文)
2020/09/01 Python
简单了解python关键字global nonlocal区别
2020/09/21 Python
日语翻译个人求职的自我评价
2013/10/14 职场文书
逃课上网检讨书
2014/02/20 职场文书
学习教师法的心得体会
2014/09/03 职场文书
汤姆索亚历险记读书笔记
2015/06/29 职场文书
读书笔记怎么写
2015/07/01 职场文书
周一给客户的问候语
2015/11/10 职场文书