1

我正在使用 href 链接从服务器下载文件。从服务器完全下载文件后,我想做一些活动。像 XMLHTTP 一样,我可以在 href 上设置一些回调函数,该函数将在请求完成时调用。

我的代码是这样的

///link to download report
<div class='report-download'><a href='' id='downloadreq'></a></div>
$("#report-download").click(OnClick);

 ///onlick function
functon OnClick()
{
  ///start progress bar
  $("#downloadreq").attr("href","8001.html?data=dowloadreport");
  //stop progress bar

}

我想在下载发生时显示一个进度条,并且我有代码来启动和停止进度条窗口。但是当我插入代码来停止进度条时,它在实际下载完成之前执行并且进度条消失了。我将如何识别报告下载已完成(或)是否可以识别下载已完成。下载报告所需的时间将很大程度上取决于要下载的记录数量。所以我不能等待默认时间段并停止进度条。

4

1 回答 1

2

我认为没有办法event知道文件下载是否已经完成。如果我是你,我会做这样的事情:

  1. 通过 PHP 打开文件并通过 HTTP 将其发送到客户端的浏览器
  2. 我会有一个变量,$_SESSION['lock'] = true;并且会在开始将流发送到输出之前设置它
  3. 文件下载完成后,我将通过以下方式解锁变量$_SESSION['lock'] = false;
  4. 在文件下载期间,我可以检查该lock值以查看文件是否已完成。通过 AJAX 每 2-5 秒说一次。
  5. 完成后 - lockis false,我可以做任何需要的事情,但我不知道如何显示进度条,即使是近似的。

请注意,如果您不使用 a 之类的东西$_SESSION,则锁定机制根本不起作用,因为脚本每次都会作为新脚本运行,而对最近的变量等一无所知。

更新:

就理解源代码而言,您可能希望使用它$_SESSION['finished']而不是$_SESSION['lock']更有意义。

于 2012-09-18T09:26:22.877 回答