2017-02-15 10 views
0

固定タイムアウトのajax要求に問題があります。だから私はこの単純なコードを使用しています。私のシナリオではブラウザの接続制限を考慮したajax要求のタイムアウト

$.ajax({ 
    url: "test.html", 
    error: function(){ 
     //do something 
    }, 
    success: function(){ 
     //do something 
    }, 
    timeout: 7000 
}); 

20のようなAJAXリクエストが7秒のタイムアウトとそれぞれ、一度に呼ばれている可能性があります。ご存知のように、各ブラウザの接続制限数は異なります。そして、ここで問題が起こります。一部のajaxリクエストは接続制限のためにキューに入れられますが、タイムアウトカウントはすでに開始されています。したがって、サーバーに到着する前に、いくつかの要求がすでにタイムアウトになっています。要求が実際にサーバーに送信されたときにタイムアウトがカウントされる可能性はありますか?

+0

「20人のアヤックスのリクエストはすぐに呼び出されるよ」「なぜ? – Andreas

+0

独自のキューイングメカニズムを作成できます。 ajaxオブジェクトを作成し、キューに追加します。 5つの並列接続のようないくつかのカスタム制限を使用し、いずれかが終了するたびに、次にキューに入れられたものを開始します。 –

+0

jQueryは基本的なXMLHttpRequestオブジェクトを公開していません - ドキュメント*要求* jqXHRオブジェクトはXMLHttpRequestオブジェクトの "スーパーセット"ですが、実際にはそうではありません –

答えて

1

$.ajaxための迅速かつ汚い「交換」は - あなただけは一例に使用するものについて説明したが、それは私がいくつかを書いた何かの簡易版で、交換

function betterAjax(options) { 
    var xhr = new XMLHttpRequest(); 
    var setListener = function(which, fn) { 
     if (typeof fn == 'function') { 
      if (which == 'success') { 
       which = 'load'; 
      } 
      xhr.addEventListener(which, fn); 
     } 
    } 
    xhr.open(options.method || 'GET', options.url); 
    setListener('success', options.success); 
    setListener('error', options.error); 
    if (options.timeout) { 
     xhr.timeout = options.timeout; 
    } 
    xhr.end(); 
} 

「のドロップ」する必要があります何年も戻ってきた - 基本的にはhttps://jsfiddle.net/jaromanda/wpkeet34/

関連する問題