0

John Culviner の (素晴らしい) jquery.fileDownload プラグインを使用しています。ダウンロードが完了したときのコールバックがありますが、ファイルの生成には約 30 秒かかります (多くのバックエンド処理)。

現在の進行状況をユーザーに通知したい。

プロトタイプとして、私はこれを試しています:

1) (ファイルのダウンロードが開始される前) - 1 秒ごとに URL を繰り返しポーリングします ($.get(...))。% complete を返し、ページの div を更新します (この時点では 0%)。

2) fileDownload スクリプトを開始します (この時点で、1) が開始をチェックしているサーバー側の変数が更新されます (例: 2% 完了.... 10% 完了.... など)。

3) 理想的には、ファイルがビルドされている間、1) の ajax 呼び出しはまだ同時にポーリング (および div の更新) を行っているため、ユーザーは進行状況を確認し始めます。

4) ダウンロードが完了します。この時点で 'progress div' を非表示にできます。これは 100% を表示するからです。

もちろん、プログレス div は最終的にはプログレス バーに置き換えられます。

問題は、fileDownload が開始されるとすぐに ajax 呼び出しが 1) キューイングを開始し、実際には 4) 後まで実行されないことです。

fileDownload プラグインは、私のメイン ページで ajax 呼び出しをブロックするとは思わなかった iframe を使用していると思いますが、そうです。

それが理にかなっていることを願っています。これに対処する方法についてのアドバイスに感謝します。

4

1 に答える 1

0

ASP.NET MVC Web アプリケーションで同じ問題が発生しました。私の場合、同じセッションを使用する 2 つのリクエストを同時に実行できなかったため、問題はサーバーに関連していました。セッションは、ASP.NET ではスレッド セーフではありません。

MVC プロジェクトの解決策は、コントローラーを[SessionState(SessionStateBehavior.ReadOnly)]属性で装飾することです。2 つのアクション間で変数を共有するCacheには、セッションの代わりにスレッドセーフを使用します。

于 2013-07-11T09:27:42.697 に答える