26 January 2010 Error, Exception, Global, Handling, HowTo, jQuery Robert Muehsig

imageEine schicke AJAX Anwendung ist heute schnell gebaut und viele Elemente werden über einen asynchronen Prozess erst geladen. Doch was passiert wenn ein serverseitiger Fehler auftaucht? Damit man nicht überall die "error" Events abfangen braucht, kann man das sehr leicht auch für jQuery global definieren.

Ein "normaler" jQuery AJAX Aufruf:

Aus der jQuery AJAX Dokumentation:

$.ajax({
   type: "POST",
   url: "some.php",
   data: "name=John&location=Boston",
   success: function(msg){
     alert( "Data Saved: " + msg );
   }
 });

Hier wird ein jQuery AJAX Aufruf an "some.php" mit ein paar Daten gemacht. Im Erfolgsfall wird die success Funktion aufgerufen. Für den Fehlerfall (und einige andere) bietet jQuery noch die Möglichkeit Funktionen zu hinterlegen. (einfach eine error Funktion ähnlich wie success hinterlegen)

Das Problem dabei:

In einem größeren Team wird es sicher einige Teammitglieder geben, die nicht an die Error-Funktion denken. Im Fehlerfall sollte dem Nutzer wenigstens gesagt werden, dass etwas schief gelaufen ist.

Die Lösung für jQuery:

Bei jQuery kann man "globale" Events abfangen. Über ajaxError kann man z.B. elegant Fehlermeldungen ausgeben - auch wenn ein "alert" nicht unbedingt elegant ist ;)

 $(document).ajaxError(function(e, xhr, settings, exception) {
                alert('Error!');
            });

Die ganze Sache ist in 5 Minuten gemacht und gibt dem Nutzer in einem Fehlerfall jedenfalls eine Meldung aus - besser als nix :)

Problemfall ASP.NET AJAX:

Da die ASP.NET MVC AJAX Helper mit dem Microsoft AJAX gemacht sind, springt leider der jQuery ajaxErrorevent nicht an. Hat hier jemand eine clientseitige, globale Errorhandling Methode gefunden ohne diesen fürchterlichen Scriptmanager?

[ Download Democode ]


Written by Robert Muehsig

Software Developer - from Saxony, Germany - working on primedocs.io. Microsoft MVP & Web Geek.
Other Projects: KnowYourStack.com | ExpensiveMeeting | EinKofferVollerReisen.de