`

利用window.open实现post方式的传递参数

    博客分类:
  • JS
阅读更多

基本业务是这样子的:根据给定的用户名和密码,加密后生成二维码然后打印出来。看似简单的一句话,存在两个大问题:

1、打印功能时不能指定打印区域的,要打印只能打印整个页面,不可能只打印二维码所在的小片区域。那么只能重新开一个窗口,然后单独打印这一个窗口;

2、重新打开窗口时需要带参数,而且参数必须是隐藏的。window.open()默认带参数的方法是在url中直接添加参数,这样子参数信息就会暴漏出来。

基于以上两个问题,考虑使用POST的方式进行提交。

 

基本思路如下:

1、定义一个POST提交方式的form表单,target为QRcodeWin,将数据存放到其中的两个隐藏域中。

2、window.open()时目标设置为form的target

3、提交表单。

 

具体代码如下:

//判断表单是否存在,若不存在则在body中添加form表单
if($("#QRcodeForm").length<=0){
	var form = "<form id='QRcodeForm' action='print/printCredentials.jsp' method='post' target='QRcodeWin'>" +
			"<input type='hidden' id='clientName' name='clientName'/>" +
			"<input type='hidden' id='clientPwd' name='clientPwd'/>" +
			"</form>";
	$("body").append(form);//在body中添加form表单
}
//将用户名和密码保存到form表单的隐藏域中
$("#clientName").val(clientName);
$("#clientPwd").val(clientPwd);
//打开新的窗口
window.open("print/printCredentials.jsp","QRcodeWin","_blank");
//提交表单
$("#QRcodeForm").submit();

值得一提的是:

在JSP页面,通过request.getParameter("clientName");获取参数会获取到两遍,第一遍是window.open()访问的因为没有提交数据所以数据都是null,第二遍是form表单提交的有数据所以能拿到。因此在进行加密时需要判断一下参数值是否为null。

参考链接:http://aguu125.iteye.com/blog/1545737

 

分享到:
评论

相关推荐

    window.open 以post方式传递参数示例代码

    代码如下: //打开新页面并利用post方式传递参数 function openNewPageWithPostData(postAddress,opentype,paramNames,paramValues) { var newWindow = window.open(postAddress,opentype); if (!newWindow) { return...

    window.open()实现post传递参数

    本文主要向大家介绍了如何使用window.open()实现post传递参数的方法,思路是参考的一位网友的,然后根据自己的项目需求做了些调整,这里同样分享给大家,希望对大家能够有所帮助。

    HTML5如何用window.postMessage在网页间传递数据

    window.postMessage的功能是允许程序员跨域在两个窗口/frames间发送数据信息。基本上,它就像是跨域的AJAX,但不是浏览器跟服务器之间交互,而是在两个客户端之间通信。让我们来看一下window.postMessage是如何工作...

    window.open以post方式将内容提交到新窗口

    于是就想到用post的方式传递,问题在于open方法不能设置请求方式,一般网页的post都是通过form来实现的。如果仅仅模拟form的提交方式,那么open方法里那种可设置窗体属性的参数又不能用。最后想办法

    在Js页面通过POST传递参数跳转到新页面详解

    因为一开始是 GET 请求,所以当传递的数据过大的时候,会报错 nginx 414 request-uri too long 客户端请求头缓冲区大小,如果请求头总长度大于小于128k,则使用此缓冲区 client_header_buffer_size 128k; 请求头...

    HTML5中使用postMessage实现两个网页间传递数据

    window.postMessage的功能是允许程序员跨域在两个窗口/frames间发送数据信息。基本上,它就像是跨域的AJAX,但不是浏览器跟服务器之间交互,而是在两个客户端之间通信。让我们来看一下window.postMessage是如何工作...

    静态页面的值传递(三部曲)

    这两窗口之间存在着关系....就是利用window.open打开的窗口.不能跨域. Post.htm &lt;input type=text name=maintext&gt; &lt;input type=button onclick=”window.open(‘Read.htm’)” value=”Open”&gt;

    html父子页面iframe双向发消息的实现示例

    postMessage方法允许来自不同源的脚本采用异步方式进行有限的通信,可以实现跨文本档、多窗口、跨域消息传递。 语法: otherWindow.postMessage(message, targetOrigin, [transfer]); otherWindow:其他窗口的引用...

    js使用post 方式打开新窗口

    但是由于我希望传递参数到服务端,而且参数看起来很长一串,而且get方式的提交参数长度是有限制的,因此我有以下需求: 1,js中实现post提交 2,返回的页面在新窗口显示 首先我是这么做的: 代码如下:  $.ajax({ ...

    js使用小技巧

    网页传递参数 location.search(); 可编辑 obj.contenteditable=true 执行菜单命令 obj.execCommand 双字节字符 /[^x00-xff]/ 汉字 /[u4e00-u9fa5]/ 让英文字符串超出表格宽度自动换行 word-wrap: ...

    ASP.NET程序中常用的三十三种代码.txt

    表格超连接列传递参数 号" DataTextField="id" NavigateUrl="aaa.aspx?id=’  &lt; %# DataBinder.Eval(Container.DataItem, "数据字段1")%&gt;’ & name=’&lt;% # DataBinder.Eval(Container.DataItem, "数据字段2")%&gt;’ /...

    。NET经典技术

     e.Item.Attributes.Add("onclick","window.open('Default.aspx?id=" + e.Item.Cells[0].Text + "');");  }  双击表格连接到另一页  在itemDataBind事件中  if(e.Item.ItemType == ListItemType.Item || e....

    ASP.NET常用代码

    6.表格超连接列传递参数 号" DataTextField="id" NavigateUrl="aaa.aspx?id='&lt;%# DataBinder.Eval(Container.DataItem, "数据字段1")%&gt;' & name='&lt;%# DataBinder.Eval(Container.DataItem, "数据字段2")%&gt;' /&gt; 7....

    java 面试题 总结

    动态INCLUDE用jsp:include动作实现 &lt;jsp:include page="included.jsp" flush="true" /&gt;它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。 静态INCLUDE用include伪码实现,定不会检查所含文件的...

    ubichr:适用于Chrome的普遍性

    open command like window (Ctrl+Space) 执行带参数的命令并预览结果 打开新标签并传递 GET 或 POST 参数(维基百科搜索、字典查找、翻译文本) 通过ajax获取数据,处理它并在扩展弹出预览中显示(例如:IMDB电影...

    超级有影响力霸气的Java面试题大全文档

     动态INCLUDE用jsp:include动作实现 &lt;jsp:include page="included.jsp" flush="true" /&gt;它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。 静态INCLUDE用include伪码实现,定不会检查所含文件...

Global site tag (gtag.js) - Google Analytics