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 相关文章推荐
给页面渲染时间加速 干掉Dom Level 0 Event
Dec 19 Javascript
JS操作Cookies的小例子
Oct 15 Javascript
JQuery打造省市下拉框联动效果
May 18 Javascript
JS实现点击颜色块切换指定区域背景颜色的方法
Feb 25 Javascript
JS实现从表格中动态删除指定行的方法
Mar 31 Javascript
js实现股票实时刷新数据案例
May 14 Javascript
protractor的安装与基本使用教程
Jul 07 Javascript
详解vuex中mapState,mapGetters,mapMutations,mapActions的作用
Apr 13 Javascript
详解vue父子组件关于模态框状态的绑定方案
Jun 05 Javascript
vue的keep-alive用法技巧
Aug 15 Javascript
Vuex实现数据共享的方法
Dec 20 Javascript
JS如何调用WebAssembly编译出来的.wasm文件
Nov 05 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 页面跳转到另一个页面的多种方法方法总结
2009/07/07 PHP
如何打开php的gd2库
2017/02/09 PHP
Laravel框架基于ajax和layer.js实现无刷新删除功能示例
2019/01/17 PHP
用javascript连接access数据库的方法
2006/11/17 Javascript
jQuery 打造动态渐变按钮 详细图文教程
2010/04/25 Javascript
JQuery实现用户名无刷新验证的小例子
2013/03/22 Javascript
jquery做的一个简单的屏幕锁定提示框
2014/03/26 Javascript
js中的DOM模拟购物车功能
2017/03/22 Javascript
react-router实现按需加载
2017/05/09 Javascript
移动端手指放大缩小插件与js源码
2017/05/22 Javascript
JS实现评价的星星功能
2017/08/20 Javascript
Vue2.0 slot分发内容与props验证的方法
2017/12/12 Javascript
element-ui表格数据转换的示例代码
2018/08/24 Javascript
vue 点击按钮实现动态挂载子组件的方法
2018/09/07 Javascript
angularJs中json数据转换与本地存储的实例
2018/10/08 Javascript
5个你不知道的JavaScript字符串处理库(小结)
2020/06/01 Javascript
vue中使用echarts的示例
2021/01/03 Vue.js
从零学Python之入门(五)缩进和选择
2014/05/27 Python
python调用fortran模块
2016/04/08 Python
python 读取DICOM头文件的实例
2018/05/07 Python
Python简单实现网页内容抓取功能示例
2018/06/07 Python
Python格式化日期时间操作示例
2018/06/28 Python
Django中自定义admin Xadmin的实现代码
2019/08/09 Python
Python的bit_length函数来二进制的位数方法
2019/08/27 Python
python实现简易学生信息管理系统
2020/04/05 Python
Python GUI库PyQt5图形和特效样式QSS介绍
2020/02/25 Python
CSS3 please 跨浏览器的CSS3产生器
2010/03/14 HTML / CSS
德国团购网站:Groupon德国
2018/03/13 全球购物
物理系毕业生自荐信
2013/11/01 职场文书
工厂厂长岗位职责
2013/11/08 职场文书
领导干部作风建设剖析材料
2014/10/11 职场文书
2015年办公室主任工作总结
2015/04/09 职场文书
总经理司机岗位职责
2015/04/10 职场文书
电影雷锋观后感
2015/06/10 职场文书
2016年六一儿童节开幕词
2016/03/04 职场文书
一级电子管军用接收机测评
2022/04/05 无线电