前提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+Ajax,实现Excel文件导出
ajax导出xml调用浏览器下载功能; ajax导入文件说明及注意事项
后端(如 springboot)直接返回excel的输出流到前端,前端使用 该方法(js原生ajax)进行接收并实现页面的下载
下面小编就为大家带来一篇Jquery ajax请求导出Excel表格的实现代码。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
利用ajax实现excel报表导出【解决乱码问题】,供大家参考,具体内容如下 背景 项目中遇到一个场景,要导出一个excel报表。由于需要token验证,所以不能用a标签;由于页面复杂,所以不能使用表单提交。初步考虑前端...
java导入导出,全部文件jar包,ajax提交form表单后返回提示数据,所有用到的文件,方法,数据,有利于学习,方便运用
使用js-xlsx实现前端导出Excel文件的场景非常广泛,例如:对于网站上收集的数据进行导出、对于网页表格数据进行导出等。使用js-xlsx可以使前端代码简单易懂,同时可以极大地减少后端的工作量。 使用js-xlsx可以很...
。。。
。。。
ajax经典教材,不管你是新手,还是老人,看看它吧!一分钟不是吹的
本篇文章主要介绍了使用Ajax生成的Excel文件并下載的实例,具有一定的参考价值,有需要的可以了解一下。
可以连接Oracle和SQL数据库的的Asp.net Ajax 无刷新省市县联动C#代码并附数据库导出文件,包含连接两类数据库的代码可自行选用,本实例应用WebService服务连接数据库
POI例子,里面使用的Jquery ajax拿后台数据,然后导出成Excel文件,也可导出Word,PPT文件。
代码如下:// 绑定导出按钮 $(“#btnExport”).clickCheckLogin(function () { var form = $(“<form>”); form.attr(‘style’, ‘display:none’); form.attr(‘target’, ”); form.attr(‘method’, ...
附带完整案例可以直接利用NPOI类库导出excel文件
在本篇文章里小编给大家整理关于Vue+axios+WebApi+NPOI导出Excel文件的知识点以及实例代码,需要的朋友们参考下。
没有任何框架只是严格按照MVC架构自己写的JSP和SERVLET,其中运用了AJAX技术、JAVASCRIPT、DOM、XML技术,这个项目是个例子项目其中主要特色是解决了从HTML中导出PDF和EXCEL格式的文件。很就借鉴价值。而且AJAX中...
利用Java技术,通过jdom实现从xml导入不同数据库,然后再从数据库导出到xml文件,中间用了点简单的Ajax技术
本文实例讲述了PHP使用ajax的post方式下载excel文件。分享给大家供大家参考,具体如下: 项目需求,前端发起ajax请求,后端生成excel并下载,同时需要在header头中,带上token验证信息,参考了很多文章,最终实现...