Ajax实现excel导出
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ajax实现excel导出相关的知识,希望对你有一定的参考价值。
$.ajax(
type : "post",
url : 'statistics/queryAction!statLog.action',
dataType : "json",
data : "updateId=" + taskId ,
async : true,
success : function(data)
$(obj).attr(disabled:"disabled");
$(obj).text("执行中");
,
error : function()
);
应用技术:struts2, ajax
实现功能:页面点击实现异步导出excel功能(浏览器提示打开保存的方式),目的是如果导出的excel文档过大,当点击其他页面时导出的过程不会中断。
我的问题是:ajax调用后台action执行导出excel动作,如果action没有执行完也就是说尚未返回success到ajax的情况下,我点击跳转到其他页面,那么这导出会不会断掉,是怎么个流转的原理,望老手指点~
你把请求发出去,action还没有返回数据,你又请求了另外的页面。这个会将之前的连接关闭,那么action无法返回数据到页面。
如果你想确定发送数据出去,action返回,前台选择保存或者取消。
那么最好在点击了下载文件功能后,将网页设置遮罩层,提示文件正在请求中。这样用户就无法点击其他操作。当action返回数据后,再将网页遮罩层取消即可!追问
我是要用ajax发请求到action实现异步的excel导出,就是这个功能而已,不需要action返回数据。你说的遮罩层我明白,可是现在需求是想执行导出过程中可以访问其他页面,我也只能想到ajax了。
那么按你的意思,这个功能难道就无法实现了么..
NFine框架JqGrid导出选中行为Excel实现方法
客户端
function PostAndGetFileByUrl(url,type,postdata) { var temp; $.ajax({ url: url, type: type, data: {keyword:postdata}, async: true, dataType: "Text", success: function (data) { downloadFile(data); } }); return temp; } function btn_export() { var $gridList = $("#gridList"); var rowData = $gridList.jqGrid(‘getGridParam‘,‘selarrrow‘); PostAndGetFileByUrl("/RunManage/EnvData/WriteToExcel", "POST", rowData.join(",")); } <a id="NF-export" class="btn btn-primary" onclick="btn_export()"><i class="fa fa-plus"></i>导出XLS</a>
[HttpPost] [HandlerAjaxOnly] public ActionResult WriteToExcel(string keyword) { DataTable dt = new DataTable(); dt.Columns.Add("AAAA"); dt.Columns.Add("BBBB"); List<ItemEntity> dataList = EnvDataApp.GetListByKeywordArray(keyword);//请写自己的获取List方法 foreach (var item in dataList) { DataRow dr = dt.NewRow(); dr["AAAA"] = item.F_ID; dr["BBBB"] = item.F_FullName; dt.Rows.Add(dr); } NPOIExcel npoiexel = new NPOIExcel(); string fileDir = DateTime.Now.ToString("yyyyMMdd"); string fileName = "G" + Guid.NewGuid().ToString("N") + ".xls"; string destDir = Server.MapPath(@"/XlsTemp") + "\\" + fileDir + "\\"; if (!Directory.Exists(destDir)) { Directory.CreateDirectory(destDir); } npoiexel.ToExcel(dt, "数据", "Sheet1", destDir + fileName); return Content("/XlsTemp/" + fileDir + "/" + fileName); } }
以上是关于Ajax实现excel导出的主要内容,如果未能解决你的问题,请参考以下文章
POI导出Excel不弹出保存提示_通过ajax异步请求(post)到后台通过POI导出Excel