通过隐藏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 相关文章推荐
ExtJs 表单提交登陆实现代码
Aug 19 Javascript
通过JavaScript控制字体大小的代码
Oct 04 Javascript
JQuery一种取同级值的方式(比如你在GridView中)
Mar 15 Javascript
基于jquery扩展漂亮的CheckBox(自己编写)
Nov 19 Javascript
jQuery实现菜单感应鼠标滑动动画效果的方法
Feb 28 Javascript
Fullpage.js固定导航栏-实现定位导航栏
Mar 17 Javascript
js学习笔记之事件处理模型
Oct 31 Javascript
Angular的自定义指令以及实例
Dec 26 Javascript
基于jQuery插件jqzoom实现的图片放大镜效果示例
Jan 23 Javascript
详解node中创建服务进程
May 09 Javascript
BootStrap Table前台和后台分页对JSON格式的要求
Jun 28 Javascript
VUE element-ui 写个复用Table组件的示例代码
Nov 18 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安装扩展mysqli的实现步骤及报错解决办法
2017/09/23 PHP
thinkphp5实现微信扫码支付
2019/12/23 PHP
浅析PHP echo 和 print 语句
2020/06/30 PHP
js 面向对象的技术创建高级 Web 应用程序
2010/02/25 Javascript
使用原生js实现页面蒙灰(mask)效果示例代码
2014/06/20 Javascript
javascript实现日期格式转换
2014/12/16 Javascript
javascript获得当前的信息的一些常用命令
2015/02/25 Javascript
ajax如何实现页面局部跳转与结果返回
2015/08/24 Javascript
jQuery实现的简洁下拉菜单导航效果代码
2015/08/26 Javascript
jQuery阻止移动端遮罩层后页面滚动
2017/03/15 Javascript
JS正则验证多个邮箱完整实例【邮箱用分号隔开】
2017/04/19 Javascript
layer弹窗插件操作方法详解
2017/05/19 Javascript
原生JS实现自定义滚动条效果
2020/10/27 Javascript
Bootstrap Table 在指定列中添加下拉框控件并获取所选值
2017/07/31 Javascript
微信小程序实现侧边栏分类
2019/10/21 Javascript
简单介绍Python的轻便web框架Bottle
2015/04/08 Python
对python中xlsx,csv以及json文件的相互转化方法详解
2018/12/25 Python
详解Django+uwsgi+Nginx上线最佳实战
2019/03/14 Python
python数据挖掘需要学的内容
2019/06/23 Python
python 设置xlabel,ylabel 坐标轴字体大小,字体类型
2019/07/23 Python
python str字符串转uuid实例
2020/03/03 Python
python实现飞机大战项目
2020/03/11 Python
Python filter过滤器原理及实例应用
2020/08/18 Python
CSS3只让背景图片旋转180度的实现示例
2021/03/09 HTML / CSS
Android面试题及答案
2015/09/04 面试题
自我鉴定书范文
2013/10/02 职场文书
母亲七十大寿答谢词
2014/01/18 职场文书
教师作风整顿个人剖析材料
2014/10/10 职场文书
《改造我们的学习》心得体会
2014/11/07 职场文书
2014年大堂经理工作总结
2014/11/21 职场文书
2014个人年终工作总结范文
2014/12/15 职场文书
工程催款通知书
2015/04/17 职场文书
读完《骆驼祥子》的观后感!
2019/07/05 职场文书
php+laravel 扫码二维码签到功能
2021/05/15 PHP
pytorch 预训练模型读取修改相关参数的填坑问题
2021/06/05 Python
python数据分析之单因素分析线性拟合及地理编码
2022/06/25 Python