处理大文件时jQuery throbber

时间:2010-12-17 20:24:20

标签: javascript jquery user-interface throbber

在我的网络应用程序上,用户可以生成一个CVS文件,有时可以获得相当大的10+ Mb。该报告显然可能需要一些时间来生成。我想在生成报告时为用户显示一个throbber,一旦提示他们保存/运行我希望throbber隐藏。这可能吗?

3 个答案:

答案 0 :(得分:1)

不,实际上不可能检测到文件何时到达并且用户保存它。你只是更新你的悸动并且在他们准备好继续时提供继续链接时,你几乎感到困惑。

如果可以,那么下载站点会在您完成文件的目标网页时使用它自动转发到下载列表。

答案 1 :(得分:0)

是的,通常JavaScript中的繁重操作被拆分为块,然后从setInterval调用。超时会使页面冻结。

var csvTxt = "";
var isDone = false;
addPart = function(){
    csvTxt += addTextFromLongCalculation();
    if(csvTxt > 10000000) isDone = true; // this is an arbitrary example
}

var handle = setInterval(function(){
   addPart();
   if(isDone){
        clearInterval(handle);
   }
}, 20);

答案 2 :(得分:0)

我猜你正在发布一些数据,在服务器上生成CSV,设置内容类型并等待浏览器的保存对话框出现。正确的吗?

在那种情况下,我认为你会失望的。我花了很多时间试图找到会触发这个确切场景的事件,我无法弄明白。我最后不得不做一些令人费解的事情,比如使用XHR来轮询文件创建的状态。一旦我得到了我想要的回复,我就把这个笨蛋隐藏起来并请求了CSV。

更清楚:

  • 显示throbber
  • 使用XHR告诉服务器启动CSV生成
  • 使用XHR轮询CSV创建的状态
  • 文件创建完成后:
    • 向文档中添加一个不可见的iframe,指向新创建的CSV并让服务器向其添加content-disposition标头。
    • 短暂延迟后隐藏悸动(您可以尝试计时,以便在显示文件保存窗口后隐藏悸动者,但用户正在与窗口交互时)。你也可以检测窗口模糊事件以隐藏悸动者,但我很确定它不会非常可靠。