2013-10-24 38 views
2

所以,我試圖設置每個請求的超時發送和解決,如果一個正在「太長」。我正在觀看網絡標籤,每個請求都低於300毫秒,但是「太長」會被記錄6次! (我發送的請求數量)。有什麼我做錯了變量,setTimeouts什麼的?奇怪的setTimeout清除行爲與jQuery AJAX

var ajaxMonitor = {}; 

function timingStart() { 
    var url = arguments[2].url; 
    ajaxMonitor[url] = {}; 
    ajaxMonitor[url].timer = setTimeout(function() { 
     console.log('too long'); 
    }, 300); 
} 

function timingEnd() { 
    var url = arguments[2].url; 
    clearTimeout(ajaxMonitor[url].timer); 
} 

$(document).ajaxSend(timingStart); 
$(document).ajaxComplete(timingEnd); 
+2

嘗試用你的「太長」的消息,並在'timingEnd'功能登錄的網址。這可能會給你更多的信息來調試。 –

+0

您是否有可能多次向同一個URL執行AJAX請求?因爲如果你是這個URL,那麼只有最近的'setTimeout'會被清除。 – Dan

回答

0

正如在評論中指出的那樣,可能是因爲你多次調用同一個url。如果是這樣的情況下,要解決這個問題的一種方法是設置它之前清除區間:

function timingStart() { 
    var url = arguments[2].url; 
    clear(url); 
    ajaxMonitor[url] = {}; 
    ajaxMonitor[url].timer = setTimeout(function() { 
    console.log('too long'); 
    }, 300); 
} 

function timingEnd() { 
    var url = arguments[2].url; 
    clear(url); 
} 

function clear(url) { 
    if(ajaxMonitor[url]) 
    clearTimeout(ajaxMonitor[url].timer); 
} 

$(document).ajaxSend(timingStart); 
$(document).ajaxComplete(timingEnd);