2013-08-23 74 views
5

我目前正在使用一個工具來檢索jQuery事件按鍵數據庫中的地址。 當文本輸入失去焦點時,我會取消每個待處理的請求,以避免在用戶填寫輸入後出現下拉菜單。 一切工作正常,但完成我發送一個最終的ajax請求,以轉到我的表單的下一步。這個請求確實比我取消所有這些請求之前慢得多。我不明白爲什麼,取消的請求不應該影響未完成的請求(我確信它們已被取消,在chrome工具的網絡選項卡中查看它)。 我使用這個代碼:jQuery ajax請求取消放慢當前請求

jQuery.xhrPool = []; 
jQuery.xhrPool.abortAll = function() { 
    jQuery(this).each(function(idx, jqXHR) { 
     jqXHR.abort(); 
     jQuery('.loader').hide(); 
    }); 
}; 

jQuery.ajaxSetup({ 
    beforeSend: function(jqXHR) { 
     jQuery.xhrPool.push(jqXHR); 
    }, 
    complete: function(jqXHR) { 
     var index = jQuery.xhrPool.indexOf(jqXHR); 
     if (index > -1) { 
      jQuery.xhrPool.splice(index, 1); 
     } 
    } 
}); 

jQuery('#my_input').blur(function(){ 
    jQuery.xhrPool.abortAll(); 
}); 

我想我有一個優化技巧我不明白。 感謝您的幫助。在

+0

如果你沒有取消它們,延遲還在嗎? –

+0

它比我取消它們要慢得多。 – M4nch4k

+0

如果您發送該請求時未發送任何先前取消的請求,該怎麼辦?我懷疑取消的要求與您遇到問題的時間長短無關。 –

回答

3

還要記住在打開一個AJAX請求到服務器,然後取消該請求不會取消來自服務器處理的請求,它只是停止瀏覽器監聽響應。服務器將繼續處理任何斷開連接的ajax請求,直到它們完成運行,此時它會嘗試向客戶端發送響應,並且發現沒有人收聽,死亡。

+1

這是一個很好的觀點,如果服務器端語言處理類似於php的會話,將會是這種情況。 –

+0

也忘了提及,瀏覽器對AJAX請求的限制可能意味着,如果您提出四個請求,並且最終請求是第五個,則根據瀏覽器限制,第五個請求將掛起,直到其他四個請求中的一個完成。 – Mark