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文字滚动停顿效果代码
Jun 28 Javascript
IONIC自定义subheader的最佳解决方案
Sep 22 Javascript
深入理解选择框脚本[推荐]
Dec 13 Javascript
移动端日期插件Mobiscroll.js使用详解
Dec 19 Javascript
JavaScript中正则表达式使数字、中文或指定字符高亮显示
Oct 31 Javascript
Vue下的国际化处理方法
Dec 18 Javascript
vue项目中跳转到外部链接的实例讲解
Sep 20 Javascript
jquery实现二级导航下拉菜单效果实例
May 14 jQuery
微信小程序实现圆形进度条动画
Nov 18 Javascript
ES6的异步终极解决方案分享
Jul 11 Javascript
vuex存储token示例
Nov 11 Javascript
js中调用微信的扫描二维码功能的实现代码
Apr 11 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
BBS(php &amp; mysql)完整版(六)
2006/10/09 PHP
在线增减.htpasswd内的用户
2006/10/09 PHP
php的dl函数用法实例
2014/11/06 PHP
php数据库操作model类(使用__call方法)
2016/11/16 PHP
ThinkPHP框架使用redirect实现页面重定向的方法实例分析
2018/04/12 PHP
PHP实现的AES加密、解密封装类与用法示例
2018/08/02 PHP
PHP设计模式之模板方法模式实例浅析
2018/12/20 PHP
laravel返回统一格式错误码问题
2019/11/04 PHP
PHP 8新特性简介
2020/08/18 PHP
pjblog修改技巧汇总
2007/03/12 Javascript
javascript之dhDataGrid Ver2.0.0代码
2007/07/01 Javascript
浅析IE10兼容性问题(frameset的cols属性)
2014/01/03 Javascript
JS+CSS简单树形菜单实现方法
2015/09/12 Javascript
jQuery图片轮播滚动切换代码分享
2020/04/20 Javascript
AngularJS整合Springmvc、Spring、Mybatis搭建开发环境
2016/02/25 Javascript
根据Bootstrap Paginator改写的js分页插件
2016/12/25 Javascript
详解支持Angular 2的表格控件
2017/01/19 Javascript
node实现生成带参数的小程序二维码并保存到本地功能示例
2018/12/05 Javascript
Vue.js实现可排序的表格组件功能示例
2019/02/19 Javascript
vue自定义表单生成器form-create使用详解
2019/07/19 Javascript
微信小程序顶部导航栏可滑动并选中放大
2019/12/05 Javascript
Python群发邮件实例代码
2014/01/03 Python
用python处理图片之打开\显示\保存图像的方法
2018/05/04 Python
python 应用之Pycharm 新建模板默认添加编码格式-作者-时间等信息【推荐】
2019/06/17 Python
pandas基于时间序列的固定时间间隔求均值的方法
2019/07/04 Python
python连接、操作mongodb数据库的方法实例详解
2019/09/11 Python
Python使用uuid库生成唯一标识ID
2020/02/12 Python
动态设置django的model field的默认值操作步骤
2020/03/30 Python
德国家具折扣店:POCO
2020/02/28 全球购物
新教师培训方案
2014/06/08 职场文书
安全资料员岗位职责范本
2014/06/28 职场文书
三方协议书
2015/01/27 职场文书
学校勤俭节约倡议书
2015/04/29 职场文书
2015年乡镇纪委工作总结
2015/05/26 职场文书
婚宴新娘致辞
2015/07/28 职场文书
MySQL创建管理RANGE分区
2022/04/13 MySQL