解决前端对应后台的导出接口 window.open()提交数据 参数过长的问题

本文介绍了一种利用POST请求改进window.open传递参数的方法,解决了GET请求中参数可见、长度限制及中文编码问题。通过创建隐藏的form表单并提交,实现了更安全、高效的数据传输。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一般 window.open 传参数都是用Get.方式,在url后面拼接参数。
但这样有时候并不适用,如:
1)不想被看到参数信息
2)参数过长,get有限制会被截断
3)可能有中文编码问题
所以需要用post方式 ,下面说的就是一种window.open发送post请求的方法。

网页的post一般是通过form表单的方式来实现的,所以现在来模拟form表单的方式来实现window.open效果。

  var winHeight = window.document.documentElement.clientHeight - 10;
  // 后台写好的导出功能接口
  var url = basePath + "/Search/export";  
  // 这里创建from表单  设置input隐藏域 携带需要的参数 注意这里要加密(中文要乱码)  后后台接收要解码 URLDecoder.decode(request.getParameter("jsonData"),"UTF-8");
  var formStr = '<form style="visibility:hidden;" method="POST" action="' + url + '">' +
  '<input type="hidden" name="listID" value="' + encodeURIComponent(listsum) + '" />' +
  '<input type="hidden" name="username" value="' + encodeURIComponent(username) + '" />' +'</form>';
  
  var win = window.open("",  "height=" + winHeight+ ",top=80,left=80,toolbar=no, menubar=no, scrollbars=yes, resizable=yes");
  
  win.document.body.innerHTML = formStr;
  
  win.document.forms[0].submit();

亲测有效,希望可以帮到你们。

### 将PDF文件流导出并保存为PDF文件的方法 在现代Web应用中,通常会通过API接口返回PDF文件流的形式来实现动态生成PDF文档的功能。以下是几种常见的技术栈及其对应解决方案。 #### 使用JavaScript处理前端接收到的PDF文件流 如果是在浏览器端接收服务器返回的PDF文件流,则可以利用`Blob`对象以及`FileSaver.js`库完成文件保存操作。具体方法如下: ```javascript // 假设这是从后端获取的数据函数 getData.接口名 = data => { return http.get(接口链接, { params: data, responseType: "blob" // 设置响应类型为二进制数据流 }); }; // 处理返回的结果 getData.接口名({}).then(response => { const blob = new Blob([response], { type: 'application/pdf' }); // 创建Blob对象 const url = window.URL.createObjectURL(blob); // 生成临时访问地址 // 下载文件 const a = document.createElement('a'); a.href = url; a.download = `report_pdf_${new Date().getTime()}.pdf`; // 文件名称 a.click(); // 清除资源 window.URL.revokeObjectURL(url); }); ``` 上述代码片段展示了如何从前端角度出发,将服务端传来的PDF文件流转存为本地磁盘上的实际文件[^3]。 #### Java后台生成PDF并通过输出流向客户端发送 对于Java开发者来说,可以通过iText这样的第三方类库创建PDF文档实例,并借助ServletOutputStream将其写入HTTP响应体之中传递给调用方。下面是一段简单的示范程序: ```java import com.itextpdf.text.Document; import com.itextpdf.text.pdf.PdfWriter; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.FileOutputStream; public class PdfExporter { public void exportPdf(HttpServletResponse response) throws Exception { Document document = new Document(); // 初始化Document对象 try (ServletOutputStream outStream = response.getOutputStream()) { PdfWriter writer = PdfWriter.getInstance(document, outStream); document.open(); // 添加内容至document... document.close(); writer.close(); // 配置Response Header以便告知浏览器这是一个可供下载的内容 response.setContentType("application/pdf"); response.setHeader("Content-disposition", "attachment; filename=example.pdf"); } catch (Exception e) { throw new RuntimeException(e.getMessage(), e); } } } ``` 此部分实现了基于Java环境下的PDF生产逻辑,并且明确了怎样把最终产物封装成适合网络传输的状态送出[^2]。 #### EPLAN工程软件中的特殊场景——带自定义参数批量转档 当涉及到像EPLAN这类专用设计工具时,除了常规手段外还需要考虑特定插件或者脚本的支持情况。比如要调整每一页布局样式的话,可能就需要按照官方指导手册里的说明去修改对应配置项了[^4]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值