使用window.open时如何隐藏URL中的数据?(jQuery场景)
解决方案
可以通过动态创建隐藏表单并以POST方式提交的方式实现,既不会把参数暴露在URL里,又能正常触发PDF下载(避免了$.post AJAX无法直接处理下载响应的问题)。
具体代码替换如下:
$("#mlt_voucher").on("click", function () { var checkedId = []; var deduction = $('#dynamicmodel-deduction_type').val(); $.each($("input:checkbox[class=chkItem]:checked"), function(){ checkedId.push($(this).attr("id")); }); // 动态创建隐藏表单 var form = $('<form>', { 'action': '$deductiondown', 'method': 'POST', 'target': '_blank' // 保持新窗口打开的原有行为 }); // 添加checkedId参数(逗号分隔字符串,后端需对应解析) form.append($('<input>', { 'type': 'hidden', 'name': 'checkedId', 'value': checkedId.join(',') })); // 添加deduction参数 form.append($('<input>', { 'type': 'hidden', 'name': 'deduction', 'value': deduction })); // 挂载表单到页面并提交,提交后移除 form.appendTo('body').submit(); form.remove(); });
补充说明
- 表单的
target="_blank"会让下载响应在新窗口打开,和你原来window.open的行为一致; - 参数通过隐藏input传递,会被放在POST请求体中,不会出现在URL里;
- 如果你的后端框架支持直接接收数组参数,也可以循环为每个checkedId创建一个
name="checkedId[]"的input,这样后端能直接拿到数组,无需处理逗号分隔的字符串。
内容的提问来源于stack exchange,提问作者Bhavesh Sahu
相关产品推荐
相关产品推荐

