代码之家  ›  专栏  ›  技术社区  ›  ern

使用JavaScript显示页面加载进度

  •  2
  • ern  · 技术社区  · 17 年前

    我正在从web服务检索文件列表并将其显示为链接。当有人点击链接时,文件应该开始下载。问题是不存在对该文件的直接访问。以下是下载文件的过程:

    1. 用户点击链接
    2. 浏览器加载的时间与从web服务恢复文件所需的时间相同

    为了应对在下载开始之前必须等待web服务的不利用户体验,我希望在单击链接时显示一个“加载…”反馈对话框,并在文件准备就绪时使该对话框消失。

    我正在使用jQuery,并且一直在尝试向页面添加iframe来加载文件,但是我遇到的问题是我不知道如何确定文件是否准备好了。

    我正在寻找提示,不仅是在客户端提供充分的反馈,还可能在服务器端(使用ASP.Net),以防万一我可以做一些事情来简化流程。非常感谢。

    5 回复  |  直到 17 年前
        1
  •  2
  •   joeytwiddle    17 年前

    听起来您需要在您的服务器上公开一个新的请求URL,它唯一的任务就是回复web服务检索是否已经完成(或者如果没有,它已经完成了多远)。

    让AJAX每隔几秒钟轮询一次该服务,并在其回复文件准备就绪时删除“Loading…”消息。

    客户机应该发送会话ID(也可能是文件ID),以便服务器知道询问的是哪个文件。服务器端需要能够联系正在运行的web服务检索进程/线程,以询问它到了什么程度。(如果找不到线程,则推测它已完成。)

        2
  •  1
  •   Temple    17 年前

    您可以在jquery中使用$.ajax函数的complete选项,请求完成时应该调用该函数

        3
  •  1
  •   TStamper    17 年前
        4
  •  1
  •   travis    17 年前

    如果您正在链接到一个ASHX,该ASHX正在抓取文件并将其写回流,则可以修改链接单击事件以显示消息。

    $(function () {
      $("a.someClass").click(function () {
        $("div.message").fadeIn();  // show a loading message
        return true; // make sure the link still gets followed
      });
    });
    

    编辑: 由于您没有直接链接到ASHX:

    $(function () {
      var ashxCallback = function (data, textStatus) {
        // data could be: xmlDoc, jsonObj, html, text, etc...
        this; // the options for this ajax request
        // textStatus can be one of: "timeout", "error", "notmodified", "success", "parsererror" 
        alert(textStatus);
      };
    
      $("a.someClass").click(function () {
        $("div.message").fadeIn();  // show a loading message
        $.get("some.ashx?id=1234", "", ashxCallback);
        return false;
      });
    });
    

    使用 jQuery.get() jQuery.post() .

        5
  •  0
  •   Thevs    17 年前

    如果准备文件的时间少于AJAX请求的默认超时时间,则可以启动AJAX请求,并向用户显示“加载…”消息。AJAX调用然后检查文件的可用性,当文件可用时,返回消息(成功与否),并提供文件的链接。AJAX请求甚至可以下载文件,但这是您的选择。

    推荐文章