2013-08-23 5 views
5

Ich verwende derzeit ein Tool zum Abrufen von Adressen in einer Datenbank mit dem jQuery-Ereignis keypress. Wenn die Texteingabe den Fokus verliert, werde ich alle ausstehenden Anforderungen abbrechen, um zu vermeiden, dass das Dropdown angezeigt wird, nachdem der Benutzer die Eingabe abgeschlossen hat. Alles funktioniert richtig, aber, um es zu beenden, sende ich eine letzte Ajax-Anfrage, um zum nächsten Schritt meines Formulars zu gehen. Diese Anfrage ist wirklich viel langsamer als zuvor, bevor ich alle diese Anfragen storniert habe. Ich verstehe nicht warum, eine abgebrochene Anfrage sollte sich nicht auf die ausstehende Anfrage auswirken (und ich bin mir sicher, dass sie annulliert wird, indem man sie in Chrome-Tools auf der Netzwerk-Registerkarte anschaut). Ich verwende diesen Code:jQuery ajax request canceled verlangsamt die aktuelle Anfrage

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

ich es denke, ich eine Optimierung Trick, den ich nicht bekommen. Danke für Ihre Hilfe.

+0

Wenn Sie sie nicht abgebrochen haben, ist die Verzögerung noch da? –

+0

Es ist viel langsamer als wenn ich sie annulliere. – M4nch4k

+0

Und was ist, wenn Sie diese Anfrage gesendet haben, ohne die vorherigen, die Sie stornieren, zu senden? Ich vermute, die abgebrochenen Anfragen haben nichts damit zu tun, wie lange der, mit dem du Probleme hast, nimmt. –

Antwort

3

Beachten Sie auch, dass eine AJAX Anfrage an den Server zu öffnen, und dann die Anforderung Cancelling wird nicht das Abbrechen Anfrage von der Verarbeitung auf dem Server, stoppt es einfach den Browser auf eine Antwort zu hören. Der Server wird weiterhin alle unterbrochenen Ajax-Anfragen bearbeiten, bis sie beendet sind. An diesem Punkt versucht er, eine Antwort an den Client zu senden und zu hören, dass niemand zuhört, stirbt.

+1

Das ist ein großartiger Punkt und wird der Fall sein, wenn die serverseitige Sprache Sitzungen ähnlich wie PHP behandelt. –

+0

Auch vergessen zu erwähnen, Grenzen auf AJAX-Anfragen durch den Browser bedeutet, dass, wenn Sie vier Anfragen stellen, und die letzte Anfrage ist die fünfte, abhängig von den Browser-Grenzen wird die fünfte Anfrage hängen, bis einer der anderen vier abgeschlossen. – Mark