2010-02-17 6 views
6

Ich habeBelastung auslösen ajaxSetup nicht vollständig Handler auf vollständige

// Ajax setup 
$.ajaxSetup({ 
beforeSend: function() { 
$('#general-ajax-load ').fadeIn(); 
}, 
complete: function() { 
$('#general-ajax-load ').fadeOut(); 
} 
}); 

auf Seite laden ladung Animation für alle meine Ajax-Aufrufe zu setzen. Es funktioniert perfekt, außer für Aufrufe von load(). Nur für Ladungen, bevor "Senden" ausgelöst wird, und "Fertig" wird nie aufgerufen. Dies führt zu einer Animation, die niemals verschwindet.

Irgendeine Idee?

Antwort

4

Nach http://bugs.jquery.com/ticket/4086#comment:4, der "richtige" Weg wäre:

$(document).ajaxSend(function(event, jqXHR, settings) { 
    $('#general-ajax-load ').fadeIn(); 
}); 

$(document).ajaxComplete(function(event, jqXHR, settings) { 
    $('#general-ajax-load ').fadeOut(); 
}); 

Ich habe gerade einige Tests durchgeführt und das scheint tatsächlich in allen Fällen zu funktionieren (einschließlich $.load).

1

Das $.load Handbuch sagt:

... Es entspricht in etwa zu $ .get (url, Daten, Erfolg), außer dass es ein Verfahren ist eher als globale Funktion und hat eine implizite Rückruffunktion.

Es scheint, dass $.load ‚s implizite Callback-Funktion in Ihrem $.ajaxSetup den complete Rückruf wird überschrieben. Die $.ajaxSetup Dokumentation sagt:

Alle nachfolgenden Ajax-Aufrufe unter Verwendung eines beliebigen Funktion werden die neuen Einstellungen verwenden, es sei denn, Anrufe von den einzelnen außer Kraft gesetzt, bis zum nächsten Aufruf von $ .ajaxSetup().

Ich denke, die Lösung wäre Ihre $.load Anrufe mit $.get zu ersetzen (oder die ausführlichere $.ajax). Sie können stattdessen auch versuchen, success zu verwenden.

2

Hinzufügen Erfolg das Problem behoben, durch (kann ich schwöre, dass ich es vorher versucht)

$.ajaxSetup({ 
beforeSend: function() { 
$('#general-ajax-load ').fadeIn(); 
}, 
complete: function() { 
$('#general-ajax-load ').fadeOut(); 
} 
success: function() { 
$('#general-ajax-load ').fadeOut(); 
} 
}); 

:)

+0

Was passiert, wenn der AJAX-Aufruf zu einem Fehler führt (d. H. HTTP 401). Wird der Erfolgshandler auch aufgerufen? –

+0

Ich denke nein, aber komplett sollte heißen. – umpirsky

Verwandte Themen