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中的undefined,null,&quot;&quot;,0和false
Mar 08 Javascript
jqPlot 基于jquery的画图插件
Apr 26 Javascript
JavaScript call apply使用 JavaScript对象的方法绑定到DOM事件后this指向问题
Sep 28 Javascript
jquery 插件学习(一)
Aug 06 Javascript
js(JavaScript)实现TAB标签切换效果的简单实例
Feb 26 Javascript
Windows 系统下安装和部署Egret的开发环境
Jul 31 Javascript
浅谈window对象的scrollBy()方法
Jul 15 Javascript
浅谈js图片前端预览之filereader和window.URL.createObjectURL
Jun 30 Javascript
JavaScript实现打印星型金字塔功能实例分析
Sep 27 Javascript
AngularJS $http post 传递参数数据的方法
Oct 09 Javascript
基于elementUI竖向表格、和并列的案例
Oct 26 Javascript
vue实现顶部菜单栏
Nov 08 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
Thinkphp中数据按分类嵌套循环实现方法
2014/10/30 PHP
PHP类的特性实例分析
2016/09/28 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
2019/09/10 PHP
贴一个在Mozilla中常用的Javascript代码
2007/01/09 Javascript
原始的js代码和jquery对比体会
2013/09/10 Javascript
javascript对中文按照拼音排序代码
2014/08/20 Javascript
JS实现统计复选框选中个数并提示确定与取消的方法
2015/07/01 Javascript
JavaScript定时器和优化的取消定时器方法
2015/07/03 Javascript
Node.js与Sails ~项目结构与Mvc实现及日志机制
2015/10/14 Javascript
BooStrap对导航条的改造实践小结
2016/09/21 Javascript
详解微信小程序开发之下拉刷新 上拉加载
2016/11/24 Javascript
微信开发之调起摄像头、本地展示图片、上传下载图片实例
2016/12/08 Javascript
Jquery Easyui进度条组件Progress使用详解(8)
2020/03/26 Javascript
利用jQuery实现滑动开关按钮效果(附demo源码下载)
2017/02/07 Javascript
zTree树形菜单交互选项卡效果的实现方法
2017/12/25 Javascript
Vue循环组件加validate多表单验证的实例
2018/09/18 Javascript
JS+php后台实现文件上传功能详解
2019/03/02 Javascript
Node.js API详解之 dgram模块用法实例分析
2020/06/05 Javascript
[01:15:00]LGD vs Mineski Supermajor 胜者组 BO3 第一场 6.5
2018/06/06 DOTA
[07:06]2018DOTA2国际邀请赛寻真——卫冕冠军Team Liquid
2018/08/10 DOTA
Python用61行代码实现图片像素化的示例代码
2018/12/10 Python
python批量修改文件夹及其子文件夹下的文件内容
2019/03/15 Python
Python弹出输入框并获取输入值的实例
2019/06/18 Python
python程序 创建多线程过程详解
2019/09/23 Python
Python 远程开关机的方法
2020/11/18 Python
马来西亚排名第一的宠物用品店:Pets Wonderland
2020/04/16 全球购物
当当网软件测试笔试题
2015/11/24 面试题
4s店机修工岗位职责
2013/12/20 职场文书
运动会广播稿60字
2014/01/15 职场文书
参赛口号
2014/06/16 职场文书
贷款担保书
2015/01/20 职场文书
新闻发布会新闻稿
2015/07/17 职场文书
2016年青少年禁毒宣传教育活动总结(学校)
2016/04/05 职场文书
pytorch 如何使用amp进行混合精度训练
2021/05/24 Python
解析python中的jsonpath 提取器
2022/01/18 Python
详解CSS3浏览器兼容
2022/12/24 HTML / CSS