2013-08-23 14 views
5

Attualmente sto usando uno strumento per recuperare gli indirizzi in un database sulla pressione dei tasti di evento jQuery. Quando l'input di testo perde lo stato attivo, annullo tutte le richieste in sospeso per evitare che il menu a discesa venga visualizzato dopo che l'utente ha terminato di compilare l'input. Tutto funziona correttamente, ma, per finire I Invia una richiesta finale di richiesta per andare al prossimo passaggio del mio modulo. Questa richiesta è molto più lenta di prima che io cancellassi tutte queste richieste. Non capisco perché, una richiesta annullata non dovrebbe influenzare quella in sospeso (e sono sicuro che sono state cancellate, cercandole nella scheda della rete in Chrome Tools). Sto usando questo codice:jQuery richiesta annullata ajax rallenta la richiesta corrente

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

Credo che ci ho un trucco di ottimizzazione che non capisco. Grazie per il tuo aiuto.

+0

Se non li hai annullati, il ritardo è ancora lì? –

+0

È molto più lento di quando li annullo. – M4nch4k

+0

E se hai inviato quella richiesta senza inviare nessuno dei precedenti che stai cancellando in primo luogo? Sospetto che le richieste annullate non abbiano nulla a che fare con quanto tempo sta prendendo la persona con cui stai avendo problemi. –

risposta

3

Ricordate anche che l'apertura di una richiesta AJAX al server, e quindi annullando la richiesta non annullare la richiesta dall'elaborazione sul server, blocca semplicemente il browser dall'ascolto di una risposta. Il server continuerà a elaborare tutte le richieste di ajax disconnesse fino al termine dell'esecuzione, a quel punto tenta di inviare una risposta al client e non trova nessuno in ascolto, muore.

+1

Questo è un grande punto e sarà il caso se il linguaggio sul lato server gestisce sessioni simili a come fa php. –

+0

Anche dimenticato di menzionare, i limiti alle richieste AJAX da parte del browser possono significare che se si fanno quattro richieste e la richiesta finale è la quinta, a seconda dei limiti del browser la quinta richiesta verrà bloccata fino a quando una delle altre quattro non sarà completa. – Mark

Problemi correlati