前提ajax是没有办法支持文件导出的
ajax 中response支持的返回值有
- "xml": 返回 XML 文档,可用 jQuery 处理。
- "html": 返回纯文本 HTML 信息;包含的 script 标签会在插入 dom 时执行。
- "script": 返回纯文本 JavaScript 代码。不会自动缓存结果。除非设置了 "cache" 参数。注意:在远程请求时(不在同一个域下),所有 POST 请求都将转为 GET 请求。(因为将使用 DOM 的 script标签来加载)
- "json": 返回 JSON 数据 。
- "jsonp": JSONP 格式。使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。
- "text": 返回纯文本字符串
可以看到是没有文件流方式的,所以是不能用于文件下载使用
这个问题的发现是由于项目中前端代码都是使用ajax的方式来写的,而在写下载的时候没有注意到该问题,就发现了文件下载不下来,最后分析出来是这个问题
解决方案有两种
1、直接让前端放弃使用ajax,而使用同步调用后端的方式来写。我们项目最后就是采取这种方案来做的
2、模拟ajax的方式来做,要注意一点ajax一定是不支持的,所以只是模拟出页面不刷新的情况下载文件而已
具体方式如下:
分步实现逻辑:
- ajax请求服务器,访问数据库,根据查询到的数据生成一个数据文件,返回前台一个json对象(可放置生成成功标记,文件路径等信息)。
- ajax success回调函数部分,根据返回的json对象,调用手写的js下载文件的方法,实现页面无刷新下载文件。
js文件 参考 https://www.cnblogs.com/zj0208/p/5961181.html
写道
// 查询数据,输出到文件,保存到服务器,并实现下载
function exportOilDetection() {
$.ajax({
type : 'POST',
dataType : 'json',
async : false,
url : "${pageContext.request.contextPath}/!ajaxExportOilDetectionInfos.action", // 生成文件,保存在服务器
data : {
ids : ids,
},
success : function(data) {
var result = data["data"];
if (result[0] == "success") {
// result[0] -- 文件生成成功标记
// result[1] -- 路径
// result[2] -- 文件名称
$.download('oilDetectionAction!ajaxDownloadDataExcel.action', 'post', result[1], result[2]); // 下载文件
} else {
alert("数据导出失败!");
}
},
error : function(XMLHttpRequest, textStatus, e) {
console.log("oilDetection.js method exportOilDetection" + e);
}
});
}
function exportOilDetection() {
$.ajax({
type : 'POST',
dataType : 'json',
async : false,
url : "${pageContext.request.contextPath}/!ajaxExportOilDetectionInfos.action", // 生成文件,保存在服务器
data : {
ids : ids,
},
success : function(data) {
var result = data["data"];
if (result[0] == "success") {
// result[0] -- 文件生成成功标记
// result[1] -- 路径
// result[2] -- 文件名称
$.download('oilDetectionAction!ajaxDownloadDataExcel.action', 'post', result[1], result[2]); // 下载文件
} else {
alert("数据导出失败!");
}
},
error : function(XMLHttpRequest, textStatus, e) {
console.log("oilDetection.js method exportOilDetection" + e);
}
});
}
相关推荐
在ASP.NET中实现Excel文件导出,通常有以下步骤: 1. **创建ASP.NET Web页面**:首先,我们需要创建一个ASP.NET Web Forms或MVC项目,并添加一个页面。在这个页面上,我们将放置用于触发导出操作的按钮或链接。 2....
在本篇文档中,我们主要探讨了使用Spring MVC和Ajax技术实现导出和导入XML文件的功能。这一技术在Web开发中十分常见,用于在客户端与服务器之间传输数据,且常常用于文件操作场景。 首先,我们来看文档中提及的导入...
后端(如 springboot)直接返回excel的输出流到前端,前端使用 该方法(js原生ajax)进行接收并实现页面的下载
总结,通过Ajax和Ext技术,我们可以实现在Web应用程序中方便地导出Ext Grid中的数据到Excel文件,提高用户体验并满足数据管理的需求。"grid2excel"这一功能的实现,简化了开发流程,使得这个过程变得更加简单和高效...
由于AJAX请求本身不支持直接导出数据为Excel文件,所以必须采用一种间接的方式。在这个例子中,通过将AJAX请求参数转换为form表单提交的方式,模拟了一个普通的页面请求。服务器端可以设计为接收到这样的请求后,...
利用ajax实现excel报表导出【解决乱码问题】,供大家参考,具体内容如下 背景 项目中遇到一个场景,要导出一个excel报表。由于需要token验证,所以不能用a标签;由于页面复杂,所以不能使用表单提交。初步考虑前端...
本话题将详细探讨Java如何进行文件的导入导出,特别是Excel文件的操作,以及如何使用Ajax与后端进行通信并获取返回的提示数据。 首先,Java导入导出文件通常涉及文件I/O操作,Java的标准库提供了`java.io`和`java....
在IT行业中,文件导出是常见的数据操作任务,特别是在企业级应用中,用户往往需要将数据导出为Excel表格以便于分析、存储或共享。这个压缩包“文件导出源码”提供了一种实现该功能的方法,特别是针对Excel格式。下面...
标题中的“推荐下载EasyUi、SpringMVC、jquery的ajax、导出Excel文件.docx”提到了四个关键的IT技术,这些技术都是在Web开发领域非常常用和重要的工具。接下来,我们将逐一深入探讨这些技术: 1. **EasyUI**: ...
本文将深入探讨四个关键的IT技术:EasyUI、SpringMVC、jQuery的AJAX以及如何在Java环境中导出Excel文件。这四个组件在构建高效、交互性强的Web应用程序时起着至关重要的作用。 1. **EasyUI**: EasyUI是一个基于...
导出完成后,通常需要一个机制来保存文件。FileSaver.js是一个轻量级的库,用于在浏览器中保存文件。与xlsx-js结合使用,可以实现Excel文件的下载。 6. **HTML5 Blob对象和URL.createObjectURL()** 使用Blob对象...
在JavaWeb开发中,"异步导出"是一种常见的需求,尤其在大数据量处理或需要保持用户界面响应性的情况下。...文件名"ajax_exp"可能表示的是与Ajax导出相关的代码或配置文件,具体内容可能涉及上述技术的实现细节。
在本文档中,我们将深入探讨如何使用Java技术栈实现导出Excel文件的功能...以上知识点涵盖了从Java后端文件生成、数据处理到前端页面触发和下载文件的整个过程,展现了在Java技术栈中实现Excel文件导出功能的技术细节。
js导出Excel 、word文件,带样式
首先,从压缩包文件的文件名我们可以看出,这里使用的是一个基于JavaScript的文件上传解决方案,可能包含一个简单的AJAX文件上传组件。`ajaxfileupload.css`是样式文件,用于定义上传界面的样式;`jquery-1.7.1.min....
本文将详细讲解如何使用jQuery实现一键导出Excel表格文件的功能。 首先,要实现这个功能,我们需要理解jQuery的核心概念。jQuery提供了一种简洁的API,通过选择器(如$("#elementID"))来选取DOM元素,并提供了丰富...
总结一下,实现“jsp点击导出数据”的功能主要涉及前端的按钮触发、Ajax请求,以及后端的Servlet处理请求、生成文件内容和设置响应头。这个过程可以扩展到更复杂的场景,如处理大量数据、优化性能或支持不同文件格式...
在描述中提到的"通过节点自动识别导出"可能是指在数据网格中,每个行可以看作一个节点,系统能够自动遍历这些节点,收集它们的数据并生成导出文件。这种自动化处理大大减少了开发人员的工作量,提高了代码的可维护性...
可以考虑使用服务端语言(如Node.js)配合`docx`库,或者使用在线API(如Google Docs API)生成DOC文件,然后通过Ajax请求将JavaScript生成的数据发送到服务器进行处理。 7. **第三方库介绍**: - **jspdf**:用于...