前端发送ajax【get/post】请求,后端生成excel文件,最后用response输出文件流,没有报错也没有文件下载提示。

最后网上搜索了一波,遇到过这个问题的还是不少,问题出在ajax本身,解决方法和原因也都找到。

ajax请求只是个“字符型”的请求,即请求的内容是以文本类型存放的。文件的下载是以二进制形式进行的,ajax没法解析后台返回的文件流,所以无法处理二进制流response输出来下载文件。

1)使用window.location.href=dataUrl;就可以实现。

当使用window.loaction.href=dataUrl后,点击“导出操作日志”时,文件下载页面也跳转到了datatUrl的地址,使用了history.go(-1)加载历史列表里的上一页解决跳转问题,后来想起用a标签做的按钮,使用href=“javascript:void(0);”便可。

href=“javascript:void(0);”意为执行一个js的空方法,这样就执行了链接,页面不动。

2)使用隐藏iframe实现无刷新下载文件

  <a href="#" οnclick="downloadFile()">download</a>
  <iframe id="ifile" style=""></iframe>
  function downloadFile(){
    var dom=document.getElementById('ifile');
    dom.src="http:xxxx.com";
 }
隐藏iframe,设置src下载地址,点击事件触发事件函数实现下载。 最近要给后台添加操作日志导出的功能,后台已经生成.xls文件,本来想只要ajax请求下就完事儿,想象总是美好的,可不管我怎么ajax,想了各种可能原因也无法解决。问题描述前端发送ajax【get/post】请求,后端生成excel文件,最后用response输出文件流,没有报错也没有文件下载提示。最后网上搜索了一波,遇到过这个问题的还是不少,问题出在ajax本身,解决方法和原因也都找到。原因aja...         最近使用poi 导出 excel 表格,但是发现 请求 成功,但是没有 下载 框,在浏览器中按F12查看,在调用的成功的response中查看到一堆乱码数据,考虑是不是返回的数据类型有 问题 ,百度了一波,才发现 不能 使用 ajax 进行 请求 如果页面使用了frame框架, 点击mvc方法调用地址, 但是没有弹出 下载 框, 而其他的配置代码没有 问题 的话, 前后台使用...
ajax 中,设置 请求 头为Content-type: application/octet-stream,无法触发 下载 。 header('Content-type: application/octet-stream; charset=utf8');// 下载 动作的关键 Header("Accept-Ranges: bytes"); header('Content-Disposition: attachment; filename=120.png'); 一、失败的原因   那是因为response原因,一般 请求
2. 问题 分析: 前端是直接通过 ajax 进行 请求 的,因为服务器端已经通过 文件 的形式响应给前端所以没有任何的json数据返回需要进行接收, 故无法 下载 ; 3.解决办法: ①使用window.location. href = ‘url’;的方式进行 请求 问题 得到解决. window.location. href = "http://localhost/d
这里写自定义目录标题 Ajax 请求 无法 导出 excel !!! Ajax 请求 无法 导出 excel !!! 最近要做一个table数据 导出 excel 的需求,本来想 Ajax 请求 一下后台就可以了,没想到死活不见效果.上网搜了一下,遇到此类 问题 的不少,在这里记录一下. 问题 描述 前端发送 ajax 请求 ,后端生成 excel 文件 ,最后用response输出 文件 流,没有报错也没有 文件下载 提示。 ajax 请求 只是个“字符型”的 请求 ,即 请求 的内容是以文本类型存放的。 文件 下载 是以二进制形式进行的, ajax 没法解析后台返回的文
success: function (result) { // 返回的数据是 Excel 文件 流,可以进行 下载 var blob = new Blob([result], { type: 'application/vnd.ms- excel ' }); var fileName = ' export .xlsx'; if (window.navigator.msSaveOrOpenBlob) { navigator.msSaveBlob(blob, fileName); } else { var downloadLink = window.URL.createObjectURL(blob); var a = document.createElement('a'); a.style.display = 'none'; a. href = downloadLink; a.download = fileName; document.body.appendChild(a); a.click(); window.URL.revokeObjectURL(downloadLink); document.body.removeChild(a); error: function (xhr, status, error) { // 错误处理 2.后端生成 Excel 文件 流并返回给前端。 ```java @RequestMapping(value = "/ export / excel ", method = RequestMethod.POST) public void export Excel (HttpServletRequest request, HttpServletResponse response) { try { // 构造 Excel 文件 Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("Sheet1"); Row row = sheet.createRow(0); Cell cell = row.createCell(0); cell.setCellValue("Hello, World!"); // 输出 Excel 文件 流 response.setContentType("application/vnd.ms- excel "); response.setHeader("Content-disposition", "attachment; filename= export .xlsx"); ServletOutputStream outputStream = response.getOutputStream(); workbook.write(outputStream); outputStream.flush(); outputStream.close(); } catch (IOException e) { e.printStackTrace(); 以上代码仅供参考,具体实现需要根据实际情况进行调整。 ### 回答2: 在使用 AJAX 导出 Excel 文件 时,可以通过以下步骤实现: 1. 创建一个包含 导出 功能的按钮或链接,并在其上绑定一个点击事件。 2. 在点击事件中,使用 AJAX 向服务器发送一个GET或POST 请求 请求 导出 Excel 文件 的URL。 3. 服务器接收到该 请求 后,根据 请求 参数生成 Excel 文件 ,并将其保存到服务器本地或者内存中。 4. 服务器将生成的 Excel 文件 的路径或内容返回给前端。 5. 前端接收到来自服务器的响应后,可以通过以下两种方式进行处理: - 使用window.open()函数将返回的 Excel 文件 路径作为参数,在新窗口中打开 Excel 文件 进行 下载 。例如: window.open(response.path),其中response.path是从服务器返回的 Excel 文件 路径。 - 使用FileSaver.js等 文件 保存库将返回的 Excel 文件 内容保存为本地 文件 。例如: 使用FileSaver.js可以通过以下代码将返回的 Excel 文件 内容保存为本地 文件 :saveAs(new Blob([response.content]), " excel .xls"),其中response.content是从服务器返回的 Excel 文件 内容。 需要注意的是,在服务器端生成 Excel 文件 时,可以使用像OpenPyXL或PHP Excel 这样的 Excel 文件 处理库来生成和处理 Excel 文件 。此外,服务器需要将生成的 Excel 文件 转换为可 下载 的格式,如.xls或.xlsx,或者返回 Excel 文件 的二进制内容。 总之,通过 AJAX 实现 导出 Excel 文件 ,可以通过向服务器发送 请求 ,生成 Excel 文件 ,并将其返回给前端,然后前端根据需要进行 下载 或保存。 ### 回答3: Ajax 导出 excel 文件 可以通过以下步骤实现: 1. 在前端页面中,首先要引入jquery等相关库 文件 ,以便使用 Ajax 进行异步操作。 2. 在页面中添加一个 导出 按钮,并为按钮添加点击事件。 3. 在点击事件中,使用 Ajax 发送一个 请求 到后端服务器。 请求 的URL应该指向用于生成 excel 文件 的接口。 4. 后端接口接收到 请求 后,根据 请求 参数生成 excel 文件 ,并将其保存到服务器指定的路径。 5. 后端将 excel 文件 的路径返回给前端。 6. 前端接收到 excel 文件 的路径后,可以通过创建一个`<a>`标签,设置其` href `属性为 excel 文件 的路径,同时设置`download`属性为 文件 名。 7. 通过使用`document.body.appendChild(a)`和`a.click()`操作,模拟用户点击 下载 链接的过程。 8. 这样,用户就可以通过点击 导出 按钮来 下载 生成的 excel 文件 。 需要注意的是,由于浏览器的安全策略限制, 不能 直接通过 Ajax 文件 内容返回给前端,而是需要先将 文件 保存到服务器端,再将 文件 路径返回给前端进行 下载 。另外,生成 excel 文件 的后端代码可以使用一些库或工具,如PHP Excel 、Node.js等,具体使用哪种方案可以根据实际需求来选择。