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的情况下,我点击跳转到其他页面,那么这导出会不会断掉,是怎么个流转的原理,望老手指点~

参考技术A 会的。当你发出请求本质就是建立了和服务器的socket通信。
你把请求发出去,action还没有返回数据,你又请求了另外的页面。这个会将之前的连接关闭,那么action无法返回数据到页面。

如果你想确定发送数据出去,action返回,前台选择保存或者取消。
那么最好在点击了下载文件功能后,将网页设置遮罩层,提示文件正在请求中。这样用户就无法点击其他操作。当action返回数据后,再将网页遮罩层取消即可!追问

我是要用ajax发请求到action实现异步的excel导出,就是这个功能而已,不需要action返回数据。你说的遮罩层我明白,可是现在需求是想执行导出过程中可以访问其他页面,我也只能想到ajax了。
那么按你的意思,这个功能难道就无法实现了么..

参考技术B 不会,java不是多线程的吗本回答被提问者采纳

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导出的主要内容,如果未能解决你的问题,请参考以下文章

form表单提交方式实现浏览器导出Excel

POI导出Excel不弹出保存提示_通过ajax异步请求(post)到后台通过POI导出Excel

如何用ajax导出excel-CSDN论坛

关于使用ajax导出excel问题

用ajax调用以response输出到客户端导出excel不成功,不报错也不提示下载

数据使用Excel导出下载