web-dev-qa-db-ja.com

AJAX(XmlHttpRequest)ブラウザによるタイムアウトの長さ

私はこれに対する正解を見つけようとしてウェブを精査してきました。ブラウザによるajaxリクエストのデフォルトのタイムアウト長を知っている人はいますか?変更された場合もバージョンごとに?

17
wajiw

ブラウザに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
5
Liviu

仕様によると、タイムアウト値はデフォルトでゼロに設定されています。これは、タイムアウトがないことを意味します。ただし、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

22
monsur

適度な量のテストを行いました。テストするために、Webサイトをロードし、ローカルサーバーを停止してから、AJAXリクエストを試行しました。最小限のコードを確保できるまで、timeoutを1000msなどの低い値に設定しました( you mustxhr.timeoutopenの後に置きますbeforesend)。

それが機能するようになると、私の最初の目標は、許可する適切な時間を決定することでしたが、ブラウザによってtimeoutが完全に無視される速さに驚きました。私の目標は、エラー処理が実行できなくなる前の最大タイムアウトcouldを決定することでした。つまり、これらのかなり短い期間を過ぎると、タイムアウトハンドラスクリプトすべて。私が見つけたのはかなり哀れでした。

  • Chrome 60:995ミリ秒、996ミリ秒は、コンソールにダーティイービルエラーをスローします。
  • Firefox 52 ESR:〜3000ms、マウスの位置またはその他の問題により、3秒前後または3秒弱で応答がない場合があります。

そう...

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ハンドラーを無視します。

2
John

ブラウザにはタイムアウト値があり、動作はブラウザによって異なりますchromeタイムアウト値は5分で、5分後にajax呼び出しを再送信します

1
Satyam Naolekar