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里面输出文件流
                           }
                       });

    });

 

如果大家还有其他什么好的解决方案请指教。

 

posted @ 2013-07-19 14:43  叶翔(常州)  阅读(1602)  评论(1)    收藏  举报