jquery.fileDownload.js插件导出excel
因为使用ajax导出excel会出现问题,所以现在使用jQuery.fileDownload.js插件来解决导出excel的问题
http://johnculviner.com/jquery-file-download-plugin-for-ajax-like-feature-rich-file-downloads/
在页面引入jquery.fileDownload.js插件
1、如下所示
<script type="text/JavaScript" src="${resource}/js/jquery.fileDownload.js"/></script>
<script type="text/javascript">
$("#export_confirm").on("click",function(){
var url="${path}/admin/information/student/export";
$.fileDownload(url,{
data:{semesterId:$("#misSemester").val()},
prepareCallback:function(url){
alert("正在导出,请稍后...");
},
successCallback: function(url){
alert("导出完成!");
},
failCallback: function (html, url) {
alert("导出失败,未知的异常。");
}
});
});
jquery-file-Download.js源码解析:
onPrepare: function (url) {
//preparingMessageHtml属性存在,弹出导出准备提示框
if (settings.preparingMessageHtml) {
//jueryUi dialog 可自己修改成其它的。
$preparingDialog = $("<div>").html(settings.preparingMessageHtml).dialog(settings.dialogOptions);
} else if (settings.prepareCallback) {
//调用回调函数
settings.prepareCallback(url);
}
},
//导出失败调用的函数
onFail: function (responseHtml, url, error) {
//准备提示对话框存在则关闭
if ($preparingDialog) {
$preparingDialog.dialog('close');
}
//failMessageHtml存在弹出对话框提示
if (settings.failMessageHtml) {
$("<div>").html(settings.failMessageHtml).dialog(settings.dialogOptions);
}
//调用回调函数
settings.failCallback(responseHtml, url, error);
deferred.reject(responseHtml, url);
}
2、在后台代码中设置Cookie,并返回Cookie的值
public void export(final HttpServletRequest request, HttpServletResponse response,final String semesterId) throws IOException, IllegalArgumentException, IllegalAccessException { String fileName = "excel文件"; response.reset(); response.setContentType("application/vnd.ms-excel;charset=utf-8"); response.setHeader("Content-Disposition", "p_w_upload;filename=" + new String((fileName + ".xls").getBytes(), "iso-8859-1"));
//在这里加入设置Cookie ------------- Cookie fileDownload=new Cookie("fileDownload", "true"); fileDownload.setPath("/"); response.addCookie(fileDownload);
//------------------------------------ ServletOutputStream out = response.getOutputStream(); final HSSFWorkbook workbook = new HSSFWorkbook(); List<Future<Boolean>> resultList = new ArrayList<Future<Boolean>>();
3、如果要使回调函数successCallback和failCallback起作用,还得在后台代码中返回Cookie
jquery-file-Download.js源码解析:
后台设置与特定的cookie值
前台js定时去调用checkFileDownloadComplete方法,检查前台与后台返回的cookie值是否匹配
//check if the file download has completed every checkInterval ms
setTimeout(checkFileDownloadComplete, settings.checkInterval);
function checkFileDownloadComplete() {
//has the cookie been written due to a file download occuring?
var cookieValue = settings.cookieValue;
if(typeof cookieValue == 'string') {
cookieValue = cookieValue.toLowerCase();
}
var lowerCaseCookie = settings.cookieName.toLowerCase() + "=" + cookieValue;
if (document.cookie.toLowerCase().indexOf(lowerCaseCookie) > -1) {
//execute specified callback
internalCallbacks.onSuccess(fileUrl);
//remove cookie
var cookieData = settings.cookieName + "=; path=" + settings.cookiePath + "; expires=" + new Date(0).toUTCString() + ";";
if (settings.cookieDomain) cookieData += " domain=" + settings.cookieDomain + ";";
document.cookie = cookieData;
//remove iframe
cleanUp(false);
return;
}
- Docker Compose 1.16.1 安装
- 教你如何用 RecyclerView 做一个好用的轮播图
- Docker-17.06.2 环境搭建
- 我所理解的Intent 和Intent-filter
- 基于 CentOS 搭建微信小程序服务
- 离线部署 CDH 5.12.1 及使用 CDH 部署 Hadoop 大数据平台集群服务
- 在开发中实现点击 WebView 中的图片,调用原生控件放大展示
- 大数据平台搭建 Hadoop-2.7.4 + Spark-2.2.0 快速搭建
- ajax 设置Access-Control-Allow-Origin实现跨域访问
- gradle新建工程,多项目依赖,聚合工程
- Apache Hive-2.3.0 快速搭建与使用
- HBase-1.3.1 集群搭建 - 报错整理
- 分布式唯一ID生成器Twitter 的 Snowflake idworker java版本
- 使用 Phoenix-4.11.0连接 Hbase 集群 ,并使用 JDBC 查询测试
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Nginx系列:后端服务应用健康检测
- 那些大厂必问的Handler和Binder,有必要去研究么?
- 欢迎来到 TreeMap 的吐槽大会
- OMG,12 个精致的 Java 字符串操作小技巧,学它
- Nginx系列:安全下载模块
- 5分钟入门GANS:原理解释和keras代码实现
- 使用ML 和 DNN 建模的技巧总结
- 医学图像分割模型U-Net介绍和Kaggle的Top1解决方案源码解析
- 机器学习中的音频特征:理解Mel频谱图
- 兄弟,如何淡定地渡过七夕?
- Spring 源码第 9 篇,深入分析 FactoryBean
- PowerBI 动态数据格式 高级版 以及重要通知
- 气哭老板的顶级密钥存放方案,又做了一件蠢事
- 构建没有数据集的辣辣椒分类器,准确性达到96%
- 由 Redis 分布式锁造成的重大事故