私はこれに対する正解を見つけようとしてウェブを精査してきました。ブラウザによるajaxリクエストのデフォルトのタイムアウト長を知っている人はいますか?変更された場合もバージョンごとに?
ブラウザにAJAXのタイムアウトがあるとは思いません。同期または非同期のリクエストしかありません。同期-最初にリクエストが返されるまでJavaScriptの実行をフリーズし、非同期-JavaScriptの実行をフリーズせず、実行フローからリクエストを削除します。コールバック関数がある場合は、実行中のスクリプトと並行して関数を実行します。 (スレッドに似ています)
**sync flow:**
running JS script
|
ajax
(wait for response)
|
execute callback
|
running JS script
**async flow:**
running JS script
|
ajax --------------------
| |
running JS script execute callback
仕様によると、タイムアウト値はデフォルトでゼロに設定されています。これは、タイムアウトがないことを意味します。ただし、XHR.timeoutプロパティにタイムアウト値を設定できます。値はミリ秒単位です。
出典:
http://www.w3.org/TR/2011/WD-XMLHttpRequest2-20110816/#the-timeout-attributehttp://msdn.Microsoft.com/en-us /library/cc304105(v=vs.85).aspx
適度な量のテストを行いました。テストするために、Webサイトをロードし、ローカルサーバーを停止してから、AJAXリクエストを試行しました。最小限のコードを確保できるまで、timeout
を1000msなどの低い値に設定しました( you mustxhr.timeout
をopen
の後に置きますbeforesend
)。
それが機能するようになると、私の最初の目標は、許可する適切な時間を決定することでしたが、ブラウザによってtimeout
が完全に無視される速さに驚きました。私の目標は、エラー処理が実行できなくなる前の最大タイムアウトcouldを決定することでした。つまり、これらのかなり短い期間を過ぎると、タイムアウトハンドラスクリプトすべて。私が見つけたのはかなり哀れでした。
そう...
xhr.open(method,url,true);
xhr.timeout = 995;//REALLY short
xhr.send(null);
xhr.ontimeout = function ()
{
//Code will only execute if at or below *effective* timeouts list above.
//Good spot to make a second attempt.
}
したがって、timeout
が995msより高く設定されている場合Chromeはコードを無視し、クリーンに保つために一生懸命働いた素敵なクリーンな空のコンソールを起動します。 Firefoxはそれほど良くはなく、信頼性の低いリクエストがあり、私が持っている忍耐力をはるかに超えてタイムアウトするため、ontimeout
ハンドラーを無視します。
ブラウザにはタイムアウト値があり、動作はブラウザによって異なりますchromeタイムアウト値は5分で、5分後にajax呼び出しを再送信します