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

在业务场景中,需要根据加密后的用户名和密码生成二维码并打印。由于打印时无法指定区域,故新开窗口打印。面临的问题是传递参数且保持隐藏。本文介绍了通过创建POST表单并利用window.open()实现参数隐藏传递的方法,详细步骤包括定义POST表单、设置window.open目标及提交表单。在JSP页面处理时要注意request.getParameter可能出现的两次调用情况。
摘要由CSDN通过智能技术生成

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

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值