window.open以post方式将内容提交到新窗口


Posted in Javascript onDecember 26, 2012

第一种方式
最近在做web项目,碰到需要跨页面传递参数的功能,就是那种需要把当前页面的内容带到新开的子窗体中,以前的做法是传一个id过去,然后在新窗口中去读数据库的内容。虽然不怎么麻烦,但是如果内容么有在数据库里保存,仅仅是处以拟稿状态时,就不能实现了,用户还常常认为是个bug。考虑采用get的方式传递,把需要的内容都序列化然后,通过url去传,显得很臃肿,而且get的传递内容长度有限制。于是就想到用post的方式传递,问题在于open方法不能设置请求方式,一般网页的post都是通过form来实现的。如果仅仅模拟form的提交方式,那么open方法里那种可设置窗体属性的参数又不能用。最后想办法整了这么一个两者结合的方式,将form的target设置成和open的name参数一样的值,通过浏览器自动识别实现了将内容post到新窗口中。

比较有意思的是直接通过调用form的submit方法不能触发onsubmit事件,查看了帮助文档,必须手动的触发,否则只能看到页面刷新而没有打开新窗口。代码中只传递了一个参数内容,实际可传递多个。
具体代码如下:

<script> 
function openPostWindow(url, data, name) 
{ 
var tempForm = document.createElement("form"); 
tempForm.id="tempForm1"; 
tempForm.method="post"; 
tempForm.action=url; 
tempForm.target=name; 
var hideInput = document.createElement("input"); 
hideInput.type="hidden"; 
hideInput.name= "content" 
hideInput.value= data; 
tempForm.appendChild(hideInput); 
tempForm.attachEvent("onsubmit",function(){ openWindow(name); }); 
document.body.appendChild(tempForm); 
tempForm.fireEvent("onsubmit"); 
tempForm.submit(); 
document.body.removeChild(tempForm); 
} 
function openWindow(name) 
{ 
window.open('about:blank',name,'height=400, width=400, top=0, left=0, toolbar=yes, menubar=yes, scrollbars=yes, resizable=yes,location=yes, status=yes'); 
} 
</script>

第二种方式
function openWindowWithPost(url,name,keys,values) 
{ 
var newWindow = window.open(url, name); 
if (!newWindow) 
return false; 
var html = ""; 
html += "<html><head></head><body><form id='formid' method='post' action='" + url + "'>"; 
if (keys && values) 
{ 
html += "<input type='hidden' name='" + keys + "' value='" + values + "'/>"; 
} 
html += "</form><script type='text/javascript'>document.getElementById('formid').submit();"; 
html += "<\/script></body></html>".toString().replace(/^.+?\*|\\(?=\/)|\*.+?$/gi, ""); 
newWindow.document.write(html); 
return newWindow; 
}

推荐使用第一种方式,第二种方式测试过程中发现,与日历弹出框冲突,如果子页面上有日历弹出框,则点日历框会不停刷新页面,不会弹出日历框。当然,也可能是我用的日历框的问题。
Javascript 相关文章推荐
JS中setTimeout()的用法详解
Apr 14 Javascript
引用 js在IE与FF之间的区别详细解析
Nov 20 Javascript
js 实现浏览历史记录示例
Apr 20 Javascript
Javascript中arguments和arguments.callee的区别浅析
Apr 24 Javascript
Javascript类型系统之String字符串类型详解
Jun 21 Javascript
JS for循环中i++ 和 ++i的区别介绍
Jul 20 Javascript
JavaScript定义数组的三种方法(new Array(),new Array('x','y')
Oct 04 Javascript
Angular2下使用pdf插件的方法详解
Apr 29 Javascript
详解使用路由延迟加载 Angular 模块
Oct 12 Javascript
讲解vue-router之命名路由和命名视图
May 28 Javascript
JS/HTML5游戏常用算法之路径搜索算法 随机迷宫算法详解【普里姆算法】
Dec 13 Javascript
Vue实现星级评价效果实例详解
Dec 30 Javascript
JavaScript中json对象和string对象之间相互转化
Dec 26 #Javascript
jQuery-serialize()输出序列化form表单值的方法
Dec 26 #Javascript
js实现运动logo图片效果及运动元素对象sportBox使用方法
Dec 25 #Javascript
基于jQuery实现下拉收缩(展开与折叠)特效
Dec 25 #Javascript
Javascript图像处理思路及实现代码
Dec 25 #Javascript
javascript的offset、client、scroll使用方法详解
Dec 25 #Javascript
JS解析json数据并将json字符串转化为数组的实现方法
Dec 25 #Javascript
You might like
亚洲咖啡有什么?亚洲咖啡产地介绍 亚洲咖啡有什么特点?
2021/03/05 新手入门
解析在PHP中使用mysqli扩展库对mysql的操作
2013/07/03 PHP
php中switch语句用法详解
2015/08/17 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
2018/02/19 PHP
thinkPHP框架RBAC实现原理分析
2019/02/01 PHP
LBS blog sql注射漏洞[All version]-官方已有补丁
2007/08/26 Javascript
基于jquery &amp; json的省市区联动代码
2012/06/26 Javascript
javascript:void(0)的作用示例介绍
2013/10/28 Javascript
Jquery取得iframe下内容的方法
2013/11/18 Javascript
js实现弹出窗口、页面变成灰色并不可操作的例子分享
2014/05/10 Javascript
js中javascript:void(0) 真正含义
2020/11/05 Javascript
jQuery取得iframe中元素的常用方法详解
2016/01/14 Javascript
javascript基本算法汇总
2016/03/09 Javascript
JavaScript通过HTML的class来获取HTML元素的方法总结
2016/05/24 Javascript
require.js配合插件text.js实现最简单的单页应用程序
2016/07/12 Javascript
easyui datagrid 大数据加载效率慢,优化解决方法(推荐)
2016/11/09 Javascript
layui框架table 数据表格的方法级渲染详解
2018/08/19 Javascript
基于vue通用表单解决方案的思考与分析
2019/03/16 Javascript
jQuery Datatables 动态列+跨列合并实现代码
2020/01/30 jQuery
详解Swift中属性的声明与作用
2016/06/30 Python
python实现画圆功能
2018/01/25 Python
python爬取淘宝商品详情页数据
2018/02/23 Python
Python实现批量修改图片格式和大小的方法【opencv库与PIL库】
2018/12/03 Python
TensorFlow基本的常量、变量和运算操作详解
2020/02/03 Python
解决pycharm导入本地py文件时,模块下方出现红色波浪线的问题
2020/06/01 Python
美国著名的家居用品购物网站:Bed Bath & Beyond
2018/01/05 全球购物
标签和贴纸印刷:Lightning Labels
2018/03/22 全球购物
美国领先的家庭智能音响系统品牌:Sonos
2018/07/20 全球购物
波兰珠宝品牌:YES
2019/08/09 全球购物
Chi Chi London官网:购买连衣裙和礼服
2020/10/25 全球购物
如何利用XMLHTTP检测URL及探测服务器信息
2013/11/10 面试题
技校教师求职简历的自我评价
2013/10/20 职场文书
聚美优品恶搞广告词
2014/03/14 职场文书
爱与责任演讲稿
2014/05/20 职场文书
2015年采购员工作总结
2015/04/27 职场文书
海洋天堂观后感
2015/06/05 职场文书