2017-02-15 116 views
0

我有一個固定超時的ajax請求出現問題。所以我只是使用這個簡單的代碼。考慮瀏覽器連接限制的ajax請求超時

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

在我的情況下,可能有20個ajax請求一次調用,每個請求的超時時間爲7秒。您可能知道,每個瀏覽器都有不同數量的連接限制。問題來了。由於連接限制,某些ajax請求排隊,但超時計數已經開始。所以有些請求在到達服務器之前就已經超時了。有沒有可能只在請求實際傳輸到服務器時才計數超時?

+0

「_就像20個Ajax請求一次被調用_」爲什麼? – 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/