2013-08-23 41 views
5

Şu anda jQuery olay tuşlarında bir veritabanındaki adresleri almak için bir araç kullanıyorum. Metin girişi odağı kaybettiğinde, kullanıcının girişi doldurması bittikten sonra açılır listeden kaçınmak için bekleyen tüm istekleri iptal ederim. Her şey düzgün çalışıyor, ancak bitirmek için Formumun bir sonraki adımına gitmek için son bir ajax isteği gönder. Bu istek, tüm bu istekleri iptal etmeden çok daha yavaştır. Nedenini anlamıyorum, iptal edilen bir istek beklemede olanı etkilememelidir (ve iptal edildiklerinden emin olun, chrome araçlarındaki ağ sekmesinde bakın). Bu kodu kullanıyorum: Oraya ben ben alamadım bir optimizasyon hile tahminjQuery ajax istek iptal edildi şu anki isteği yavaşlatıyor

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(); 
}); 

. Yardımlarınız için teşekkürler. ki

+0

Onları iptal etmediyseniz, gecikme hala var mı? –

+0

Onları iptal ettiğimde çok daha yavaştır. – M4nch4k

+0

Peki ya bu talebi, daha önce iptal ettiğiniz bir önceki gönderilerinizi göndermeden gönderdiyseniz ne olur? İptal edilen isteklerin, sorun yaşadığınız sorunun ne kadar sürdüğü ile alakası bulunmadığından şüpheleniyorum. –

cevap

3

hatırla çok ebeveyn elemanlarından odak kaybı tespit destekler iptal olmaz isteğini sunucuya bir AJAX isteği açarak ve sonra iptal olduğunu Sunucuda işlem yapması istendiğinde, yalnızca bir yanıt dinlemesi için tarayıcıyı durdurur. Sunucu, bağlantı kesilen ajax isteklerini çalışmayı bitirene kadar işlemeye devam edecektir, bu noktada istemciye bir yanıt göndermeye ve hiç kimseyi dinlemeyeceğine karar verir, ölür.

+1

Bu harika bir nokta ve sunucu tarafı dili, php'nin nasıl yapıldığına benzer oturumları işliyorsa geçerli olacaktır. –

+0

Ayrıca unutmamak, tarayıcı tarafından AJAX istekleri ile ilgili sınırlamalar, dört istekleri yaparsanız ve son istek beşinci, beşinci isteğin diğer dört tamamlanana kadar asmak için gidiyor olacak demektir anlamına gelebilir. – Mark

İlgili konular