サーバーがリクエストに応答する前に、エラーが表示されるまでブラウザはどのくらい待つことができますか?この時間は無制限ですか?
JQuery $ .ajax呼び出しを使用している場合、タイムアウトプロパティを設定して、リクエストがタイムアウトステータスで返されるまでの時間を制御できます。タイムアウトはミリ秒単位で設定されるため、非常に高い値に設定するだけです。 「無制限」に0に設定することもできますが、私の意見では、代わりに高い値を設定する必要があります。
注:無制限は 実際はデフォルト ですが、ほとんどのブラウザーにはヒットするデフォルトのタイムアウトがあります。
タイムアウトによりajax呼び出しが返されると、必要に応じて別のケースで処理できる「タイムアウト」のエラーステータスで返されます。
したがって、タイムアウトを3秒に設定し、タイムアウトを処理する場合の例を次に示します。
$.ajax({
url: "/your_ajax_method/",
type: "GET",
dataType: "json",
timeout: 3000, //Set your timeout value in milliseconds or 0 for unlimited
success: function(response) { alert(response); },
error: function(jqXHR, textStatus, errorThrown) {
if(textStatus==="timeout") {
alert("Call has timed out"); //Handle the timeout
} else {
alert("Another error was returned"); //Handle other error type
}
}
});
はいといいえ。はい、サーバーはそれを行うことができるか、そうするように構成できます。ブラウザー(バージョン/ディストリビューターの詳細についてはわかりません)でタイムアウトを有効にすることはできません。
ただし、HTTP経由でこれを達成/エミュレートするには2つのソリューションがあります。
あなたが達成しようとしていることについてもう少し説明できますか?サーバーで長時間実行されているプロセスがありますか、ローカルマシンだけで設定を変更したいですか、それとも大量に管理する方法ですか?ユーザーの?
ブラウザが待機する時間は、いくつかの要因に依存します。タイムアウトが発生する場所-TCPレベル、サーバーまたはローカルブラウザーのどちらですか?
サーバー上で長時間実行されているプロセスがあり、後でWebページを更新する場合、それを処理する一般的な方法は、長いプロセスを非同期で実行し、完了したときにクライアントに通知することです。サーバーをポーリングするajax呼び出しを行うか、HTTP 1.1を使用してクライアントに通知ストリームを提供します。
どちらの場合でも、接続を閉じることはまだ可能であるため、クライアントは再び接続を開く必要があります。
通常の(HTMLページ)リクエストの場合、ブラウザーはccaの後にタイムアウトになります。 30秒他の参加者がおそらくそれに続くので、それは重要です:プロキシ、ルーター(ルーターはこのゲームでプレイしますか?私にはわかりません)。私は4秒長いサーバー側の遅延(クライアントに送信するものがない場合)を使用しています。そして、私のAJAXクライアントはすぐに別のHTTP要求を実行します(私はローカルネットワーク、インターネットラグはありません)4秒は、頻繁なポーリングでサーバーとネットワークを過負荷にしないために十分な長さであり、何らかの理由でクライアントが検出できない行から1つのポーリングが落ちる場合に十分に短いですそしてハンドル。
また、コメットには別の問題(長いHTTPリクエスト)があります:同時HTTPリクエストの数に対するブラウザの制限、クライアント側イベントの処理(すぐにサーバーに送信する必要があります)、サーバー/ネットワークダウンの検出と回復、マルチユーザー処理等.