7 Stimmen

JQuery Ajax-Anforderung abgebrochen verlangsamt die aktuelle Anforderung

Derzeit verwende ich ein Tool, um Adressen in einer Datenbank beim jQuery-Tastendruckereignis abzurufen. Wenn das Texteingabefeld den Fokus verliert, breche ich alle ausstehenden Anfragen ab, um zu verhindern, dass das Dropdown-Menü erscheint, nachdem der Benutzer die Eingabe abgeschlossen hat. Alles funktioniert korrekt, aber zum Abschluss sende ich eine letzte Ajax-Anfrage, um zum nächsten Schritt meines Formulars zu gelangen. Diese Anfrage ist wirklich viel langsamer als bevor ich alle diese Anfragen abgebrochen habe. Ich verstehe nicht warum, eine abgebrochene Anfrage sollte die ausstehende nicht beeinflussen (und ich bin sicher, dass sie abgebrochen sind, wenn ich sie im Netzwerk-Tab in den Chrome-Tools überprüfe).

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 vermute, dass es einen Optimierungstrick gibt, den ich nicht verstehe. Vielen Dank für Ihre Hilfe.

6voto

Mark Punkte 841

Denken Sie auch daran, dass das Öffnen einer AJAX-Anforderung an den Server und das Abbrechen der Anforderung die Verarbeitung auf dem Server nicht abbricht. Es stoppt einfach den Browser vom Zuhören nach einer Antwort. Der Server wird weiterhin alle getrennten AJAX-Anforderungen verarbeiten, bis sie fertig sind. Anschließend versucht er eine Antwort an den Client zu senden und stellt fest, dass niemand zuhört, und geht dann aus.

0voto

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

blur-Ereignis unterstützt das Erkennen des Fokusverlusts von übergeordneten Elementen

Unterschiede zwischen blur und focusout - gibt es wirklich welche?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X