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 を使用していると思いますが、そうです。
それが理にかなっていることを願っています。これに対処する方法についてのアドバイスに感謝します。