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. 終了したら、必要なことlockfalse何でもできますが、プログレスバーを表示する方法がわかりません。

のようなものを使用しない場合$_SESSION、ロック メカニズムはまったく機能しないことに注意してください。スクリプトは、最近の変数などをまったく知らずに、毎回新しいスクリプトとして実行されるためです。

アップデート:

ソースコードを理解するという意味では、 which$_SESSION['finished']の代わりに使用した方がより理にかなっているかもしれません。$_SESSION['lock']

于 2012-09-18T09:26:22.877 に答える