jQuery.ajaxのtimeoutはユーザーの入力時間を含む


現象

jQuery.ajaxにtimeoutオプションをつけたときは、Basic認証のダイアログへの入力も時間内に済ませなければなりません。

例えば、5000msに設定した場合は5秒以内にBasic認証のIDとパスワードを入力しないと、Ajaxリクエストは失敗します。

理由

jQueryはXMLHttpRequest.timeoutを使っていません。
自前でタイマーを立て、設定時間がすぎたらXMLHttpRequest.abort()を呼びます。

if ( s.async && s.timeout > 0 ) {
  timeoutTimer = window.setTimeout( function() {
    jqXHR.abort( "timeout" );
  }, s.timeout );
}