通过隐藏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 相关文章推荐
javascript 闭包疑问
Dec 30 Javascript
Jquery中ajax方法data参数的用法小结
Feb 12 Javascript
JavaScript onkeydown事件入门实例(键盘某个按键被按下)
Oct 17 Javascript
jquery实现textarea输入框限制字数的方法
Jan 15 Javascript
jQuery+css3动画属性制作猎豹浏览器宽屏banner焦点图
Mar 16 Javascript
javascript实现完美拖拽效果
May 06 Javascript
基于jQuery.Hz2Py.js插件实现的汉字转拼音特效
May 07 Javascript
javascript从作用域链谈闭包
Jul 29 Javascript
有关suggest快速删除后仍然出现下拉列表的bug问题
Dec 02 Javascript
JavaScript 栈的详解及实例代码
Jan 22 Javascript
js 倒计时(高效率服务器时间同步)
Sep 12 Javascript
vue element-ui读取pdf文件的方法
Nov 26 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 strip_tags()去除HTML、XML以及PHP的标签介绍
2014/02/18 PHP
探寻PHP脚本不报错的原因
2014/06/12 PHP
解读PHP中的垃圾回收机制
2015/08/10 PHP
Yii2框架中使用PHPExcel导出Excel文件的示例
2017/08/09 PHP
jquery 简单导航实现代码
2009/09/11 Javascript
jquery对元素拖动排序示例
2014/01/16 Javascript
js用闭包遍历树状数组的方法
2014/03/19 Javascript
JS+CSS实现弹出全屏灰黑色透明遮罩效果的方法
2014/12/20 Javascript
JavaScript常用小技巧小结
2014/12/29 Javascript
学习JavaScript鼠标响应事件
2015/12/25 Javascript
20分钟轻松创建自己的Bootstrap站点
2016/05/12 Javascript
完美解决jQuery的hover事件在IE中不停闪动的问题
2017/02/10 Javascript
BootStrap daterangepicker 双日历控件
2017/06/02 Javascript
jQury Ajax使用Token验证身份实例代码
2017/09/22 Javascript
基于Webpack4和React hooks搭建项目的方法
2019/02/05 Javascript
es6数值的扩展方法
2019/03/11 Javascript
js函数柯里化的方法和作用实例分析
2020/04/11 Javascript
javascript设计模式 ? 解释器模式原理与用法实例分析
2020/04/17 Javascript
JavaScript实现H5接金币功能(实例代码)
2021/02/22 Javascript
Python中动态检测编码chardet的使用教程
2017/07/06 Python
Python实现的归并排序算法示例
2017/11/21 Python
详解python OpenCV学习笔记之直方图均衡化
2018/02/08 Python
使用k8s部署Django项目的方法步骤
2019/01/14 Python
python代理工具mitmproxy使用指南
2019/07/04 Python
Django 框架模型操作入门教程
2019/11/05 Python
Python获取统计自己的qq群成员信息的方法
2019/11/15 Python
Python requests接口测试实现代码
2020/09/08 Python
pyqt5实现井字棋的示例代码
2020/12/07 Python
详解CSS3 用border写 空心三角箭头 (两种写法)
2017/09/29 HTML / CSS
人事专员岗位职责
2013/11/20 职场文书
单位门卫岗位职责
2013/12/20 职场文书
房屋租赁意向书
2014/04/01 职场文书
团干部培训方案
2014/06/03 职场文书
美术课外活动总结
2014/07/08 职场文书
政府四风问题整改措施
2014/10/04 职场文书
个人职业生涯规划之自我评估篇
2019/09/03 职场文书