通过隐藏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 相关文章推荐
js 函数的副作用分析
Aug 23 Javascript
防止xss和sql注入:JS特殊字符过滤正则
Apr 18 Javascript
Javascript高级技巧分享
Feb 25 Javascript
JavaScript获取网页表单提交方式的方法
Apr 02 Javascript
JavaScript获得url查询参数的方法
Jul 02 Javascript
jQuery左侧大图右侧小图焦点图幻灯切换代码分享
Aug 19 Javascript
js实现的页面矩阵图形变换特效
Jan 26 Javascript
js简单倒计时实现代码
Apr 30 Javascript
详谈JS中数组的迭代方法和归并方法
Aug 11 Javascript
基于JavaScript实现带数据验证和复选框的表单提交
Aug 23 Javascript
vue数据控制视图源码解析
Mar 28 Javascript
vue小白入门教程
Apr 02 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 has encountered an Access Violation 错误的解决方法
2010/01/17 PHP
强制PHP命令行脚本单进程运行的方法
2014/04/15 PHP
php隐藏实际地址的文件下载方法
2015/04/18 PHP
Linux安装配置php环境的方法
2016/01/14 PHP
PHP实现二维数组按照指定的字段进行排序算法示例
2019/04/23 PHP
jQuery ReferenceError: $ is not defined 错误的处理办法
2013/05/10 Javascript
三种AngularJS中获取数据源的方式
2016/02/02 Javascript
jQuery基本选择器(实例及表单域value的获取方法)
2016/05/20 Javascript
Vuex模块化实现待办事项的状态管理
2017/03/15 Javascript
vue中的非父子间的通讯问题简单的实例代码
2017/07/19 Javascript
微信小程序之数据缓存的实例详解
2017/09/29 Javascript
JavaScript折半查找(二分查找)算法原理与实现方法示例
2018/08/06 Javascript
[jQuery] 事件和动画详解
2019/03/05 jQuery
JavaScript使用面向对象实现的拖拽功能详解
2019/06/12 Javascript
微信小程序事件流原理解析
2019/11/27 Javascript
[02:23]2016国际邀请赛中国区预选赛wings晋级之路
2016/06/29 DOTA
Python性能优化的20条建议
2014/10/25 Python
django上传图片并生成缩略图方法示例
2017/12/11 Python
opencv改变imshow窗口大小,窗口位置的方法
2018/04/02 Python
python简易远程控制单线程版
2018/06/20 Python
django富文本编辑器的实现示例
2019/04/10 Python
PyQt4 treewidget 选择改变颜色,并设置可编辑的方法
2019/06/17 Python
Python批量修改图片分辨率的实例代码
2019/07/04 Python
Django和Flask框架优缺点对比
2019/10/24 Python
暑假实习求职信范文
2013/09/22 职场文书
大学生军训广播稿
2014/01/24 职场文书
《一个中国孩子的呼声》教学反思
2014/02/12 职场文书
保险专业自荐信范文
2014/02/20 职场文书
母亲节感恩活动记录
2014/03/16 职场文书
自我查摆剖析材料
2014/10/11 职场文书
无房产证房屋转让协议书合同样本
2014/10/18 职场文书
事业单位个人查摆问题及整改措施
2014/10/28 职场文书
思想道德自我评价2015
2015/03/09 职场文书
2015大学生求职信范文
2015/03/20 职场文书
服装区域经理岗位职责
2015/04/10 职场文书
python和anaconda的区别
2022/05/06 Python