Response 输出文件流过程中的等待效果
大家在写程序过程中应该会遇到这样的问题,就是我们需要导出excel,当我们往excel写数据的时候,如果数据量较大的话,这个过程可能需要花些时间。
这个时候我们不能说让用户点完导出按钮后就在那边傻等,页面上一点动静没有的话会让不懂计算机的客户很担心的,也不知道到底自己点中了没有,还是死机了。
所以在等待文件输出的过程中最好能有一个等待的效果,比如一个遮罩层啊什么的,然后在 Response.WriteFile后把遮罩关闭。
前端我们需要调用一个遮罩的等待效果
/*
这块是一大堆往excel写数据的过程,需要花时间
*/
//这块是输出文件
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader("content-disposition", "attachment; filename=stafflist.xls");
Response.ContentType = "application/ms-excel";
Response.WriteFile(Server.MapPath("STemp/" + rad + ".xls"));
Response.Flush();
Response.Close();
System.IO.File.Delete(Server.MapPath("STemp/" + rad+ ".xls"));
前面都还好办,问题就是在文件流输出后,怎么把遮罩层关掉。在 Response.Close();后面写什么代码都不管用了,哪怕像前台注册脚本,都没有效果。
遮罩层一直在那,我不知道各位大神是怎么解决这个问题的,我在百度上也没查到,我觉得应该也是这样,我们都人为的把Response输出内容改变了,
整个页面应该是做不了其他什么动作了。
我自己想了个解决方案,就是把【往excel写数据的过程】和【文件输出过程分开】
$("#queding").click(function() {
这里调用等待效果的js
staffh.ashx这个文件里耗时的execl操作
$.post("staffh.ashx", { json: myJsonData }, function(data) {
if (data == 'OK') {
//这个时候关闭等待效果的js
form1.submit(); //form1里面输出文件流
}
});
});
如果大家还有其他什么好的解决方案请指教。

浙公网安备 33010602011771号