通过隐藏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 AutoScroller 函数类
May 29 Javascript
Mootools 1.2教程 同时进行多个形变动画
Sep 15 Javascript
深入理解JavaScript系列(9) 根本没有“JSON对象”这回事!
Jan 15 Javascript
Ext JS 4官方文档之三 -- 类体系概述与实践
Dec 16 Javascript
jQuery插件开发的两种方法及$.fn.extend的详解
Jan 16 Javascript
Js控制滑轮左右滑动实例
Feb 13 Javascript
浅谈javascript中的闭包
May 13 Javascript
JavaScript基本数据类型及值类型和引用类型
Aug 25 Javascript
JavaScript面向对象编写购物车功能
Aug 19 Javascript
Vue中fragment.js使用方法详解
Mar 09 Javascript
基于代数方程库Algebra.js解二元一次方程功能示例
Jun 09 Javascript
layui table动态表头 改变表格头部 重新加载表格的方法
Sep 21 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
《超神学院》霸气归来, 天使彦上演维多利亚的秘密
2020/03/02 国漫
PHP的关于变量和日期处理的一些面试题目整理
2015/08/10 PHP
JavaScript入门教程(5) js Screen屏幕对象
2009/01/31 Javascript
High Performance JavaScript(高性能JavaScript)读书笔记分析
2011/05/05 Javascript
jQuery 常见操作实现方式和常用函数方法总结
2011/05/06 Javascript
js使用递归解析xml
2014/12/12 Javascript
jquery实现鼠标滑过显示提示框的方法
2015/02/05 Javascript
Js的Array数组对象详解
2016/02/22 Javascript
带有定位当前位置的百度地图前端web api实例代码
2016/06/21 Javascript
jQuery中ajax错误调试分析
2016/12/01 Javascript
微信小程序组件 contact-button(客服会话按钮)详解及实例代码
2017/01/10 Javascript
JavaScript中的FileReader图片预览上传功能实现代码
2017/07/24 Javascript
JS实现元素上下左右移动效果
2017/10/18 Javascript
layer插件select选中默认值的方法
2018/08/14 Javascript
基于javascript实现贪吃蛇小游戏
2019/11/25 Javascript
解决Vue-Router升级导致的Uncaught (in promise)问题
2020/08/07 Javascript
[39:07]LGD vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.21
2018/08/22 DOTA
python虚拟环境的安装配置图文教程
2017/10/20 Python
Python设计模式之代理模式实例详解
2019/01/19 Python
Python之修改图片像素值的方法
2019/07/03 Python
python3读取csv文件任意行列代码实例
2020/01/13 Python
Python 格式化输出_String Formatting_控制小数点位数的实例详解
2020/02/04 Python
django实现模型字段动态choice的操作
2020/04/01 Python
python 代码运行时间获取方式详解
2020/09/18 Python
美国休闲服装品牌:J.Crew Factory
2017/03/04 全球购物
Why do we need Unit test
2013/01/03 面试题
送餐员岗位职责范本
2014/02/21 职场文书
《鸟的天堂》教学反思
2014/02/27 职场文书
企业形象策划方案
2014/05/29 职场文书
爱的承诺书
2015/01/20 职场文书
酒店总经理岗位职责
2015/04/01 职场文书
党章学习心得体会2016
2016/01/14 职场文书
利用Selenium添加cookie实现自动登录的示例代码(fofa)
2021/05/08 Python
pytorch fine-tune 预训练的模型操作
2021/06/03 Python
ant design vue的form表单取值方法
2022/06/01 Vue.js
微信小程序纯CSS实现无限弹幕滚动效果
2022/09/23 HTML / CSS