2010-07-27 12 views
12

Ich möchte den Benutzer alarmieren, wenn es einen AJAX-Fehler gibt. Sie können dies über $.ajaxSetup:

$.ajaxSetup({ 
    error: function() { 
    alert("OOPS!") 
    } 
}); 

But the jQuery docs recommend against this:

Hinweis: Globale Callback-Funktionen sollten mit den jeweiligen globalen Ajax Event-Handler Methoden-.ajaxStart(), .ajaxStop eingestellt werden (), .ajaxComplete(), .ajaxError(), .ajaxSuccess(), .ajaxSend() - eher als innerhalb des Einstellungsobjekts für $ .ajaxSetup().

Also ich denke, ich sollte dies tun:

$("#some_random_div").ajaxError(function() { 
    alert("OOPS!") 
}); 

Das macht keinen Sinn für mich machen: der Rückruf AJAX Fehler bezieht sich auf meine Anwendung als Ganzes, nicht eine bestimmte Seite Element . Warum sollte die Callback-Funktion einem einzelnen Seitenelement zugeordnet werden?

Also: Warum empfehlen die jQuery-Dokumente, etwas zu verwenden, das wie ein weniger lesbarer Ansatz aussieht, und welcher Ansatz ist der beste?

+0

Ich ziehe ajaxSetup für diesen Zweck. – Kris

Antwort

7

Die typische Anwendung ist, dass die spezifische Seite Element, das Sie ajaxError binden an die div, wo Ihre Fehlermeldung angezeigt werden soll ; vielleicht eine "Flash" Nachricht div am oberen Rand Ihrer Seite. Auf diese Weise haben Sie direkten Zugriff auf dieses div, um Ihre Nachricht anzuhängen.

Wenn Sie jedoch kein bestimmtes DOM-Element als Nachrichtenanzeigebereich verwenden, können Sie es sicher an $(document) oder ein anderes solches globales Element binden.

+2

Ab jQuery 1.9, die ajax events sollten sowieso nur auf 'document' verwendet werden, also sollte es wie' $ (document) .ajaxError (function() {...}) 'oder' $ (document) .on ("ajaxError ", Funktion() {...})'. Der Grund, warum die Dokumente sagen, dass sie $ $ .ajaxSetup() 'nicht dafür verwenden sollen, sind nur die * Standard * -Einstellungen für eine Anfrage; Jede Anfrage, die ihren eigenen 'Fehler'-Handler definiert, würde den einen Satz in' $ überlisten.ajaxSetup() 'das ist wahrscheinlich nicht das, was du wolltest. –

0

Sie können die Fehlerfunktion für den ganzen Körper wie folgt verdrahten:

$('body').ajaxError(function() { 
    alert("OOPS!") 
}); 
+1

Aber ist das nicht weniger lesbar als der 'ajaxSetup()' Ansatz? Dh, die Funktion hier hat * nichts * zu tun mit dem Dokumentenkörper (anders ausgedrückt, wenn ich die gleiche genaue Wirkung erzielen könnte, indem ich "Körper" für * jedes * andere Element ersetze, scheint dies der falsche Ansatz zu sein) –

0

Es kann Umstände geben, unter denen es sich auf ein einzelnes Steuerelement beziehen kann - z. B. wenn Sie eine Autovervollständigung haben, die über eine Ajax-Datenbank in die Datenbank geleitet wird, im Gegensatz zu einer ganzen Seite. Dies würde dann bestimmen, ob Sie den Fehler für eine Komponente der Seite isolieren möchten und wenn ja, wie die Antwort auf den Fehler sein sollte, anstatt mit einem allgemeineren Ansatz.


Verwandte Themen