文件上传,iframe跨域数据提交的实现


Posted in Javascript onNovember 18, 2016

1、文件上传,图片上传,第三方uploadify插件,http://www.uploadify.com/about/

2、用iframe上传文件,提交表单,主要思路就是:

 a、js创建form表单,iframe,添加到body里,form的target要和iframe的name一致。

 b、form表单里更新数据,submit提交

 c、如果上传文件,图片,form里面添加 input-file 元素,绑定onchange事件,js触发,在onchange里面添加submit事件

 d、关于回调:iframe提交成功后,返回的数据在iframe子页面的里面,可以这样获取,需要拆分:

$iframe[0].contentWindow.document.querySelector('body').innerHTML

代码片:

 

var target = 'frameFile';
var input = '<input type="file" name="file" onchange="changeImage()">' +
  '<input name="appId" value="'+id+'">' +
  '<input type="submit" name="submit" value="submit">';
var $form = $('<form action="'+ url +'" target="'+ target +'" enctype="multipart/form-data" method="post" id="upImageForm" style="display:none">'+input+'</form>').appendTo('body');
var $iframe = $('<iframe name="'+ target +'" style="display:none"></iframe>').appendTo('body');
$form.find('input').eq(0).click();
window.changeImage = function(){
  $form.find('input').eq(-1).click();
};

//检测iframe页面load
$iframe.load(function(e){
  var str = $iframe[0].contentWindow.document.querySelector('body').innerHTML;
  var data = spt(str);
  $form.remove();
  $iframe.remove();
  callback(data);
});
function spt(str){
  //字符串拆成对象
  var a = str.indexOf('{');
  var b = str.indexOf('}');
  var j = {};
  var t = [];
  var s = str.substring(a+1,b);
  s = s.replace(/"/gi,'');
  t = s.split(',');
  for(var i=0; i<t.length; i++ ){
    var tmp = t[i].split(':');
    j[tmp[0]] = tmp[1];
  };
  return j;
};

 2-c修正,以上代码有bug:

手动触发input-file的onchange事件,在事件里面submit,这做法有问题。因为触发onchange事件,选择才开始,submit就已经提交了。

上传功能,form表单元素只能放到html里。

以上这篇文件上传,iframe跨域数据提交的实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS 类型转换常见方法小结
May 31 Javascript
js实现的标题栏新消息闪烁提示效果
Jun 06 Javascript
Js制作点击输入框时默认文字消失的效果
Sep 05 Javascript
JQuery入门基础小实例(1)
Sep 17 Javascript
js实现仿微博滚动显示信息的效果
Dec 21 Javascript
浅谈angularjs module返回对象的坑(推荐)
Oct 21 Javascript
js简单实现网页换肤功能
Apr 07 Javascript
Vue 组件传值几种常用方法【总结】
May 28 Javascript
在Vuex使用dispatch和commit来调用mutations的区别详解
Sep 18 Javascript
详解关于element el-button使用$attrs的一个注意要点
Nov 09 Javascript
VSCode 添加自定义注释的方法(附带红色警戒经典注释风格)
Aug 27 Javascript
JavaScript实现滚动加载更多
Dec 27 Javascript
jQuery实现自动调用和触发某个事件的方法
Nov 18 #Javascript
jQuery与JavaScript节点创建方法的对比
Nov 18 #Javascript
用iframe实现不刷新整个页面上传图片的实例
Nov 18 #Javascript
Form表单按回车自动提交表单的实现方法
Nov 18 #Javascript
form+iframe解决跨域上传文件的方法
Nov 18 #Javascript
jQuery ajax 当async为false时解决同步操作失败的问题
Nov 18 #Javascript
微信小程序开发实战教程之手势解锁
Nov 18 #Javascript
You might like
新版mysql+apache+php Linux安装指南
2006/10/09 PHP
解析php中获取url与物理路径的总结
2013/06/21 PHP
php session劫持和防范的方法
2013/11/12 PHP
php实现读取内存顺序号
2015/03/29 PHP
php合并数组并保留键值的实现方法
2018/03/12 PHP
Javascript加载速度慢的解决方案
2014/03/11 Javascript
jquery弹窗插件colorbox绑定动态生成元素的方法
2014/06/20 Javascript
JavaScript实现将UPC转换成ISBN的方法
2015/05/26 Javascript
干货分享:让你分分钟学会javascript闭包
2015/12/25 Javascript
实例讲解jquery中mouseleave和mouseout的区别
2016/02/17 Javascript
快速掌握Node.js中setTimeout和setInterval的使用方法
2016/03/21 Javascript
JS 调试中常见的报错问题解决方法
2017/05/20 Javascript
js指定步长实现单方向匀速运动
2017/07/17 Javascript
vue.js 双层嵌套for遍历的方法详解, 类似php foreach()
2018/09/07 Javascript
node和vue实现商城用户地址模块
2018/12/05 Javascript
跟混乱的页面弹窗说再见
2019/04/11 Javascript
Vue CLI3移动端适配(px2rem或postcss-plugin-px2rem)
2020/04/27 Javascript
[06:24]DOTA2 2015国际邀请赛中国区预选赛第二日TOP10
2015/05/27 DOTA
使用Python获取Linux系统的各种信息
2014/07/10 Python
python logging类库使用例子
2014/11/22 Python
python3抓取中文网页的方法
2015/07/28 Python
Python的mysql数据库的更新如何实现
2017/07/31 Python
python基于ID3思想的决策树
2018/01/03 Python
python list元素为tuple时的排序方法
2018/04/18 Python
Python中filter与lambda的结合使用详解
2019/12/24 Python
Python如何对XML 解析
2020/06/28 Python
Python 绘制可视化折线图
2020/07/22 Python
如何在scrapy中集成selenium爬取网页的方法
2020/11/18 Python
世界上第一个水枕头:Mediflow
2018/12/06 全球购物
吉列剃须刀英国官网:Gillette英国
2019/03/28 全球购物
什么是聚集索引和非聚集索引
2012/01/17 面试题
文科教师毕业的自我评价
2014/01/16 职场文书
员工考核管理制度
2014/02/02 职场文书
2016年公共机构节能宣传周活动总结
2016/04/05 职场文书
使用Springboot实现健身房管理系统
2021/07/01 Java/Android
zabbix配置nginx监控的实现
2022/05/25 Servers