通过隐藏iframe实现无刷新上传文件操作


Posted in Javascript onMarch 16, 2016

其实在ajax出现之前,web应用也可以是无刷新的,那时大多通过IFrame来做到这一点。当然Ajax出现之后,人们一窝蜂地投奔Ajax 的阵营了,iFrame 就乏人问津了。但是用iFrame来实现无刷新上传文件确实一个很好的选择。

解决办法是通过一个隐藏的iframe来处理上传操作我采用的是ReactJS,amazeui,nodejs

1.html target指向iframe的name,就是把上传后的操作交给iframe来处理.

<form id="supplyformFile" name="formFile" method="post" target="frameFile"
encType="multipart/form-data">
<div className="am-form-file">
<button type="button" className="am-btn am-btn-default am-btn-sm">
<i className="am-icon-cloud-upload"></i> 选择要上传的文件
</button>
<input type="file" id="fileUp" onChange={this.UploadSupplyer} name="fileUp" />
</div> 
<div id="supplyfile_div"></div>
</form>
<iframe id="frameFile" name="frameFile" style={{display: 'none'}}></iframe>
<input type="hidden" id="supplyfile" />

2.JS处理当文件选择后提交form

UploadSupplyer:function(){
var path = document.all.fileUp.value;
if(!path){return false;}
$('.loadinfo').html('<p>文件上传中...</p>').removeClass("none");
$('#supplyformFile').submit();
},

3.nodejs服务器处理,因为处理页面是nodejs服务器域,iframe中存在跨域的问题,所以需要用到H5的postMessage方法来传递参数给iframe外面的表单页面

var fname = req.files.fileUp.path.replace("publicfiles", "").replace("public/files/", "");
res.writeHead(200, {'Content-type' : 'text/html'});
res.write('<script>');
res.write('window.parent.postMessage("'+fname+'","*");');
res.end('</script>');

4.JS处理上传结果

window.addEventListener('message',function(e){
var fname=e.data;
$('#supplyfile').val(fname);
$(".loadinfo").addClass("none");
$(".successinfo").html("<p>文件上传成功</p>").removeClass("none");
setTimeout(function() { $(".successinfo").addClass("none");}, 2000);
$("#supplyfile_div").html('<span class="am-icon-file-o"></span> <a target="_blank" href="'+hosts+'/files/'+fname+'">供应商确认单</a>');
},false);

以上所述是小编给大家介绍的通过隐藏iframe实现无刷新上传文件操作,希望对大家有所帮助!

Javascript 相关文章推荐
JQuery 前台切换网站的样式实现
Jun 22 Javascript
JavaScript 产生不重复的随机数三种实现思路
Dec 13 Javascript
jquery如何把数组变为字符串传到服务端并处理
Apr 30 Javascript
如何根据百度地图计算出两地之间的驾驶距离(两种语言js和C#)
Oct 29 Javascript
js实现点击获取验证码倒计时效果
Jan 28 Javascript
如何防止JavaScript自动插入分号
Nov 05 Javascript
jQuery 1.9.1源码分析系列(十五)动画处理之缓动动画核心Tween
Dec 03 Javascript
JavaScript中的各种操作符使用总结
May 26 Javascript
jQuery如何获取动态添加的元素
Jun 24 Javascript
JS中setTimeout和setInterval的最大延时值详解
Feb 13 Javascript
vue-cli 为项目设置别名的方法
Oct 15 Javascript
使用Bootstrap做一个朝代历史表
Dec 10 Javascript
原生JS实现平滑回到顶部组件
Mar 16 #Javascript
基于jquery实现百度新闻导航菜单滑动动画
Mar 15 #Javascript
dedecms页面如何获取会员状态的实例代码
Mar 15 #Javascript
JavaScript隐式类型转换
Mar 15 #Javascript
JavaScript正则表达式匹配 div  style标签
Mar 15 #Javascript
Angularjs整合微信UI(weui)
Mar 15 #Javascript
一步步教大家编写酷炫的导航栏js+css实现
Mar 14 #Javascript
You might like
PHP中10个不常见却非常有用的函数
2010/03/21 PHP
php ci框架验证码实例分析
2013/06/26 PHP
php函数与传递参数实例分析
2014/11/15 PHP
php绘制一个矩形的方法
2015/01/24 PHP
PHP 图片处理
2020/09/16 PHP
Ext JS Grid在IE6 下宽度的问题解决方法
2009/02/15 Javascript
关于Jqzoom的使用心得 jquery放大镜效果插件
2010/04/12 Javascript
分享8款优秀的 jQuery 加载动画和进度条插件
2012/10/24 Javascript
第六章之辅组类与响应式工具
2016/04/25 Javascript
弹出遮罩层后禁止滚动效果【实现代码】
2016/04/29 Javascript
适用于手机端的jQuery图片滑块动画
2016/12/09 Javascript
Bootstrap里的文件分别代表什么意思及其引用方法
2017/05/01 Javascript
Angularjs实现上传图片预览功能
2017/09/01 Javascript
使用nodejs+express实现简单的文件上传功能
2017/12/27 NodeJs
浅谈angular4.0中路由传递参数、获取参数最nice的写法
2018/03/12 Javascript
javascript 函数的暂停和恢复实例详解
2020/04/25 Javascript
vue实现简单加法计算器
2020/10/22 Javascript
Python bsddb模块操作Berkeley DB数据库介绍
2015/04/08 Python
利用Python暴力破解zip文件口令的方法详解
2017/12/21 Python
PyTorch读取Cifar数据集并显示图片的实例讲解
2018/07/27 Python
python对数组进行排序,并输出排序后对应的索引值方式
2020/02/28 Python
python爬取代理IP并进行有效的IP测试实现
2020/10/09 Python
Django前后端分离csrf token获取方式
2020/12/25 Python
StubHub巴西:购买和出售您的门票
2016/07/22 全球购物
波兰家居和花园家具专家:4Home
2019/05/26 全球购物
商场总经理岗位职责
2014/02/03 职场文书
合作意向协议书范本
2014/03/31 职场文书
学校运动会广播稿范文
2014/10/02 职场文书
2015教师年度工作总结范文
2015/04/07 职场文书
党支部创先争优公开承诺书
2015/04/30 职场文书
2015小学语文教师个人工作总结
2015/05/20 职场文书
html实现随机点名器的示例代码
2021/04/02 Javascript
php双向队列实例讲解
2021/11/17 PHP
Nginx工作模式及代理配置的使用细节
2022/03/21 Servers
Apache SeaTunnel实现 非CDC数据抽取
2022/05/20 Servers
ssh服务器拒绝了密码 请再试一次已解决(亲测有效)
2022/08/14 Servers