809 Stimmen

jQuery Ajax-Fehlerbehandlung, Anzeige benutzerdefinierter Ausnahmemeldungen

Gibt es eine Möglichkeit, die ich benutzerdefinierte Ausnahmemeldungen als eine Warnung in meinem jQuery AJAX-Fehlermeldung anzeigen kann?

Wenn ich zum Beispiel eine Ausnahme auf der Serverseite auslösen möchte, und zwar über Streben por throw new ApplicationException("User name already exists"); Ich möchte diese Meldung ("Benutzername existiert bereits") in der jQuery AJAX-Fehlermeldung abfangen.

jQuery("#save").click(function () {
  if (jQuery('#form').jVal()) {
    jQuery.ajax({
      type: "POST",
      url: "saveuser.do",
      dataType: "html",
      data: "userId=" + encodeURIComponent(trim(document.forms[0].userId.value)),
      success: function (response) {
        jQuery("#usergrid").trigger("reloadGrid");
        clear();
        alert("Details saved successfully!!!");
      },
      error: function (xhr, ajaxOptions, thrownError) {
        alert(xhr.status);
        alert(thrownError);
      }
    });
  }
});

Bei der zweiten Meldung im Fehler-Callback, bei der ich eine Meldung thrownError erhalte ich undefined y el xhr.status Code ist 500 .

Ich bin mir nicht sicher, was ich falsch mache. Was kann ich tun, um dieses Problem zu beheben?

30voto

Abhay Maurya Punkte 10423

Wenn jemand hier wie im Jahr 2016 für die Antwort ist, verwenden Sie .fail() für die Fehlerbehandlung als .error() ist ab jQuery 3.0 veraltet

$.ajax( "example.php" )
  .done(function() {
    alert( "success" );
  })
  .fail(function(jqXHR, textStatus, errorThrown) {
    //handle error here
  })

Ich hoffe, es hilft

25voto

Cengiz Araz Punkte 609

Dies ist, was ich tat und es funktioniert so weit in einer MVC 5-Anwendung.

Der Rückgabetyp des Controllers ist ContentResult.

public ContentResult DoSomething()
{
    if(somethingIsTrue)
    {
        Response.StatusCode = 500 //Anything other than 2XX HTTP status codes should work
        Response.Write("My Message");
        return new ContentResult();
    }

    //Do something in here//
    string json = "whatever json goes here";

    return new ContentResult{Content = json, ContentType = "application/json"};
}

Und auf der Client-Seite sieht die Ajax-Funktion so aus

$.ajax({
    type: "POST",
    url: URL,
    data: DATA,
    dataType: "json",
    success: function (json) {
        //Do something with the returned json object.
    },
    error: function (xhr, status, errorThrown) {
        //Here the status code can be retrieved like;
        xhr.status;

        //The message added to Response object in Controller can be retrieved as following.
        xhr.responseText;
    }
});

18voto

Robert Koritnik Punkte 100480

Eine allgemeine/wiederverwendbare Lösung

Diese Antwort soll all denjenigen als Referenz dienen, die auf dieses Problem stoßen. Die Lösung besteht aus zwei Dingen:

  1. Benutzerdefinierte Ausnahme ModelStateException der ausgelöst wird, wenn die Validierung auf dem Server fehlschlägt (der Modellstatus meldet Validierungsfehler, wenn wir Datenannotationen und stark typisierte Controller-Aktionsparameter verwenden)
  2. Benutzerdefinierter Controller-Aktionsfehlerfilter HandleModelStateExceptionAttribute die eine benutzerdefinierte Ausnahme abfängt und einen HTTP-Fehlerstatus mit einem Modellstatusfehler im Textkörper zurückgibt

Dies bietet die optimale Infrastruktur für jQuery Ajax-Aufrufe, um ihr volles Potenzial mit success y error Bearbeiter.

Client-seitiger Code

$.ajax({
    type: "POST",
    url: "some/url",
    success: function(data, status, xhr) {
        // handle success
    },
    error: function(xhr, status, error) {
        // handle error
    }
});

Serverseitiger Code

[HandleModelStateException]
public ActionResult Create(User user)
{
    if (!this.ModelState.IsValid)
    {
        throw new ModelStateException(this.ModelState);
    }

    // create new user because validation was successful
}

Die ganze Problematik wird ausführlich beschrieben in dieser Blogbeitrag wo Sie den gesamten Code finden, um dies in Ihrer Anwendung auszuführen.

17voto

Wara Haii Punkte 192
 error:function (xhr, ajaxOptions, thrownError) {
        alert(xhr.status);
        alert(thrownError);
      }

in Code-Fehler Ajax-Anfrage für Fang Fehler verbinden zwischen Client und Server Wenn Sie eine Fehlermeldung Ihrer Anwendung anzeigen möchten, senden Sie diese im Erfolgsbereich

wie zum Beispiel

success: function(data){
   //   data is object  send  form server 
   //   property of data 
   //   status  type boolean 
   //   msg     type string
   //   result  type string
  if(data.status){ // true  not error 
         $('#api_text').val(data.result);
  }
  else 
  {
      $('#error_text').val(data.msg);
  }

}

16voto

crazyDiamond Punkte 922

Ich fand dies nett, weil ich die Nachricht, die ich vom Server gesendet habe, analysieren und eine freundliche Nachricht für den Benutzer ohne den Stacktrace anzeigen konnte...

error: function (response) {
      var r = jQuery.parseJSON(response.responseText);
      alert("Message: " + r.Message);
      alert("StackTrace: " + r.StackTrace);
      alert("ExceptionType: " + r.ExceptionType);
}

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