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函数般调用正则
Apr 08 Javascript
关于Javascript模块化和命名空间管理的问题说明
Dec 06 Javascript
javascript数字格式化通用类 accounting.js使用
Aug 24 Javascript
Jquery解析json数据详解
Dec 26 Javascript
Javascript基础教程之while语句
Jan 18 Javascript
javascript中定义类的方法详解
Feb 10 Javascript
js 函数式编程学习笔记
Mar 25 Javascript
gulp解决跨域的配置文件问题
Jun 08 Javascript
Vue的实例、生命周期与Vue脚手架(vue-cli)实例详解
Dec 27 Javascript
JavaScript实现数值自动增加动画
Dec 28 Javascript
layui默认选中table的CheckBox复选框方法
Sep 19 Javascript
Vue实现简单的留言板
Oct 23 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
Extended CHM PHP 语法手册之 DIY
2006/10/09 PHP
php mysql_real_escape_string函数用法与实例教程
2013/09/30 PHP
PHP解析html类库simple_html_dom的转码bug
2014/05/22 PHP
php精度计算的问题解析
2019/06/21 PHP
Javascript 面向对象 对象(Object)
2010/05/13 Javascript
使用JavaScript检测Firefox浏览器是否启用了Firebug的代码
2010/12/28 Javascript
对xmlHttp对象方法和属性的理解
2011/01/17 Javascript
js数字转换为float,取N位小数
2014/02/08 Javascript
jquery插件冲突(jquery.noconflict)解决方法分享
2014/03/20 Javascript
javascript中局部变量和全局变量的区别详解
2015/02/27 Javascript
基于jQuery实现Div窗口震动特效代码-代码简单
2015/08/28 Javascript
深入理解jQuery()方法的构建原理
2016/12/05 Javascript
JavaScript程序设计高级算法之动态规划实例分析
2017/11/24 Javascript
Vue三种常用传值示例(父传子、子传父、非父子)
2018/07/24 Javascript
详解vuex commit保存数据技巧
2018/12/25 Javascript
element-ui 中使用upload多文件上传只请求一次接口
2019/07/19 Javascript
mock.js模拟前后台交互
2019/07/25 Javascript
Python标准异常和异常处理详解
2015/02/02 Python
Python的Django REST框架中的序列化及请求和返回
2016/04/11 Python
PyQt5实现让QScrollArea支持鼠标拖动的操作方法
2019/06/19 Python
在Pandas中处理NaN值的方法
2019/06/25 Python
django基础学习之send_mail功能
2019/08/07 Python
html5菜单折纸效果
2014/04/22 HTML / CSS
萌新HTML5 入门指南(二)
2020/11/09 HTML / CSS
门卫工作岗位职责
2013/12/17 职场文书
应届毕业生如何写求职信
2014/02/16 职场文书
城市创卫标语
2014/06/17 职场文书
五一劳动节演讲稿
2014/09/12 职场文书
大学生上课迟到检讨书
2014/10/15 职场文书
离婚协议书包括哪些内容
2014/10/16 职场文书
任命通知范文
2015/04/21 职场文书
红歌会主持词
2015/07/02 职场文书
谢师宴家长答谢词
2015/09/30 职场文书
浅谈哪个Python库才最适合做数据可视化
2021/06/28 Python
SQL实现LeetCode(177.第N高薪水)
2021/08/04 MySQL
Pytorch中使用ImageFolder读取数据集时忽略特定文件
2022/03/23 Python