0

私のソリューションで js async コールバックの問題に直面しています。これが要件です。

  1. ユーザーが [Excel の生成] ボタンをクリックします。
  2. サーバー上で、大量のデータを含む Excel ファイルが生成されています (約 2 分かかります)。
  3. この間、ユーザーはページのポストバック/リクエストなどを含む、アプリケーションで他の操作を実行できます。
  4. Excel が生成されると、ユーザーが表示しているページに関係なく、サーバーからファイルをダウンロードするためのポップアップが表示されます。

私がしたこと :

  • ビジネス ニーズに合わせて Excel ファイルを生成する関数 ' GenerateReport ' を作成しました。(サーバ側)
  • ファイルがいくつかのサーバーの場所でGenerateReportメソッドによって生成されたかどうかを再帰的にチェックし、新しいファイルのファイル パスを返すWebMethod ' GetFilePath ' を作成しました。このメソッドは、ビジネス ロジックに従って同じファイル パスを再度返すことはありません。(サーバ側)
  • GetFilePathメソッドを 60 秒の遅延で再帰的に呼び出すJavaScript 関数DownloadLink()を 1 つ作成しました。関数呼び出しは次のようになります。

    PageMethods.GetFilePath(UserId, onSuccess, onError);

  • OnSuccess と OnError は JS コールバック関数です。OnSuccess はファイルのダウンロード用の URL が利用可能になると発生します。この JS メソッドはダウンロード用のポップアップを表示します。エラーが発生した場合は OnError が呼び出されます。

次のシナリオが発生するまで、正常に動作します。 GetFilePath メソッドから OnSuccesss が呼び出され、他の操作のポストバックが同時に発生した場合、新しいページがまだ読み込まれておらず、ダウンロード ポップアップがユーザーに表示されないため、OnSuccess 呼び出しは行われません。

ユーザーが確実にダウンロード リンクを取得できるように、この問題を解決するにはどうすればよいですか。

4

1 に答える 1

0

60 秒ごとのチェックに加えて、ページが最初にロードされたときにダウンロード リンクの準備ができているかどうかをチェックします。

于 2012-08-27T12:36:37.847 に答える