ajax 呼び出しの応答に 4 時間かかることを真剣に望んでいますか? これは、Web とブラウザーの通常の動作ではほとんど意味がありません。再設計を強くお勧めします。
つまり、jQuery の呼び出しには、http: //api.jquery.com/jQuery.ajax/$.ajax()
で説明されているオプションとして設定できるタイムアウト値があります。ブラウザが 4 時間まで設定できるかどうかはわかりませんが、それでも適切に動作します。いずれにせよ、ブラウザ接続を 4 時間開いたままにしておく必要がある可能性は高くありません。一時的な問題が発生した場合、どうしますか? 最初からやり直します?これは良いデザインではありません。
再設計として私が提案するのは、問題をより短い ajax 呼び出しで満たすことができる小さな断片に分割することです。本当に 4 時間の操作が必要な場合は、1 回の ajax 呼び出しで操作を開始し、ブラウザーから数分ごとにポーリングして、ジョブがいつ完了したかを確認することをお勧めします。最終的に完了したら、結果を取得できます。これは、ajax 呼び出しとブラウザーが機能する通常の方法との互換性がはるかに高く、4 時間の間に一時的なインターネット障害が発生しても影響を受けません。
可能であれば、最初の ajax 呼び出しで操作にかかる時間の概算を返すこともできます。これにより、結果を待っているブラウザーで役立つ UI が提供される可能性があります。
可能性は次のとおりです。
ステップ 1. ジョブの開始を要求する ajax 呼び出しを送信します。ジョブ ID と、ジョブの推定時間に関する関連情報をすぐに受け取ります。
ステップ 2. ジョブの推定時間に基づいてポーリング間隔を計算します。見積もりが 4 時間で、見積もりが概して正確である場合は、タイマーを設定して 2 時間後にもう一度尋ねることができます。データを要求するときは、最初の ajax 呼び出しで返されたジョブ ID を送信します。
ステップ 3. 完了予定時刻に近づくと、ポーリング間隔をおそらく数分にまで狭めることができます。最終的に、データが完了したことを示すポーリング リクエストを受け取り、データが返されます。私がサーバーを設計していた場合、クライアントが何らかの理由で再度要求する必要がある場合に備えて、データをサーバーに一定期間キャッシュして、4 時間のプロセスを繰り返す必要がないようにします。
ああ、それから、サーバーの設計を変更して、定期的に要求されるものが 4 時間もかからないようにすることを考えます。ある種のバッチ方式 (たとえば、1 日に 2 回) で事前にビルドして事前にキャッシュするか、4 時間ではなく 1 分以内で一般的なクエリを満たすことができるように、スキーム全体をやり直す必要があります。