使用JavaScript显示页面加载进度

时间:2009-05-08 14:28:25

标签: asp.net javascript jquery download

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

  1. 用户点击链接
  2. 服务器调用Web服务以检索文件
  3. 只要从Web服务中恢复文件,浏览器就会加载
  4. 浏览器终于​​向用户提供文件供下载
  5. 为了抵消在下载开始之前必须等待Web服务的不利用户体验,我想在单击链接时显示“正在加载...”反馈对话框,并在对话时将对话框消失文件准备就绪。

    我正在使用jQuery,并且一直在为页面添加iframe来加载文件,但我遇到的问题是我不知道如何确定该文件已准备就绪。

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

    更新:为了澄清,这是用于将文件下载到用户的计算机。我特别想要的是确定文件何时可以下载的方法。因此,当上面的步骤#4发生时,我想删除“正在加载...”消息。

5 个答案:

答案 0 :(得分:2)

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

让AJAX轮询每隔几秒钟进行一次服务,并在回复该文件准备就绪时删除“正在加载...”消息。

客户端应发送会话ID(也可能是文件ID),以便服务器知道询问的文件。服务器端需要能够联系正在运行的Web服务检索进程/线程,询问它到底有多远。 (如果它找不到线程,那么可能已经完成了。)

答案 1 :(得分:1)

你可以在jquery中使用$ .ajax函数的完整选项,当请求完成时应该调用它。

答案 2 :(得分:1)

您可以 jQuery 等待点击链接,点击链接时会显示加载显示消息。

示例显示了您可以关注的'Loading - Please wait' Message Display Script

编辑 -

基本上你需要一个进度条监视器,我从来没有看到它只使用javascript,但使用flash或ajax。

这是一个应该有用的File Upload Demo

答案 3 :(得分:1)

如果您要链接到正在抓取文件并将其写回流的ASHX,您可以修改链接点击事件以显示消息。

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

在等待ASHX写回响应时,加载消息可能只是一个微调器。

编辑:由于您没有直接链接到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()

编辑#2:我只是想到了另一个想法。如果Loading ...消息位于重定向到文件的iframe中,该怎么办?因此,您将使用jQuery显示iframe,它将具有加载的默认消息...以及一个小的微调器动画,然后将iframe的src /位置设置为永远加载的ASHX。然后,您可以从iframe的父页面中为其提供一个隐藏/删除它的onload处理程序。如果您需要示例代码,请告诉我。

答案 4 :(得分:0)

如果文件准备时间小于AJAX请求的默认超时,则可以启动AJAX请求,向用户显示“正在加载...”消息。然后AJAX调用检查文件的可用性,当它变得可用时 - 返回消息(成功与否)并给出文件的链接。 AJAX请求甚至可以进行文件下载,但这是您的选择。