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 相关文章推荐
JavaScript/jQuery 表单美化插件小结
Feb 14 Javascript
jquery延迟加载外部js实现代码
Jan 11 Javascript
Ajax请求在数据量大的时候出现超时的解决方法
Feb 27 Javascript
javascript中clipboardData对象用法详解
May 13 Javascript
jQuery实现html表格动态添加新行的方法
May 28 Javascript
ES6深入理解之“let”能替代”var“吗?
Jun 28 Javascript
vue 自定义组件 v-model双向绑定、 父子组件同步通信的多种写法
Nov 27 Javascript
基于vue 开发中出现警告问题去除方法
Jan 25 Javascript
vue开发环境配置跨域的方法步骤
Jan 16 Javascript
vue项目打包之后背景样式丢失的解决方案
Jan 17 Javascript
JS如何实现网站中PC端和手机端自动识别并跳转对应的代码
Jan 08 Javascript
node.js通过Sequelize 连接MySQL的方法
Dec 28 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
PHP Class&amp;Object -- PHP 自排序二叉树的深入解析
2013/06/25 PHP
php实现Linux服务器木马排查及加固功能
2014/12/29 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
2018/02/07 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
2018/06/13 PHP
PHP登录验证功能示例【用户名、密码、验证码、数据库、已登陆验证、自动登录和注销登录等】
2019/02/25 PHP
JavaScript与函数式编程解释
2007/04/27 Javascript
js 图片轮播(5张图片)
2008/12/30 Javascript
两个select之间option的互相添加操作(jquery实现)
2009/11/12 Javascript
为JavaScript提供睡眠功能(sleep) 自编译JS引擎
2010/08/16 Javascript
基于Jquery的实现回车键Enter切换焦点
2010/09/14 Javascript
突发奇想的一个jquery插件
2010/11/19 Javascript
Javascript中的getUTCDay()方法使用详解
2015/06/10 Javascript
深入浅出ES6新特性之函数默认参数和箭头函数
2016/08/01 Javascript
Angular实现较为复杂的表格过滤,删除功能示例
2017/12/23 Javascript
vue组件name的作用小结
2018/05/23 Javascript
JS中判断字符串存在和非空的方法
2018/09/12 Javascript
Vue Cli3 创建项目的方法步骤
2018/10/15 Javascript
微信小程序自定义底部弹出框动画
2020/11/18 Javascript
微信小程序实现点击导航条切换页面
2020/11/19 Javascript
[01:14:19]NAVI vs Mineski 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
[01:18]PWL开团时刻DAY10——一拳超人
2020/11/11 DOTA
Python中django学习心得
2017/12/06 Python
Django自带的用户验证系统实现
2020/12/18 Python
HTML5新控件之日期和时间选择输入的实现代码
2018/09/13 HTML / CSS
平面设计自荐信
2013/10/07 职场文书
汽车机修工岗位职责
2014/03/06 职场文书
企业出纳岗位职责
2014/03/12 职场文书
农村门前三包责任书
2014/07/25 职场文书
机关作风整顿个人整改措施思想汇报
2014/09/29 职场文书
2014年技术工作总结范文
2014/11/20 职场文书
决心书格式及范文
2019/06/24 职场文书
小学生必读成语故事大全:送给暑假的你们
2019/07/09 职场文书
分析MySQL抛出异常的几种常见解决方式
2021/05/18 MySQL
python单元测试之pytest的使用
2021/06/07 Python
Python使用华为API为图像设置多个锚点标签
2022/04/12 Python
PYTHON基于Pyecharts绘制常见的直角坐标系图表
2022/04/28 Python