Gibt es eine Möglichkeit, benutzerdefinierte Ausnahmemeldungen als Warnung in meiner jQuery AJAX-Fehlermeldung anzuzeigen?
Wenn ich beispielsweise über Struts by eine Ausnahme auf der Serverseite auslösenthrow new ApplicationException("User name already exists");
möchte, möchte ich diese Nachricht ('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 Warnung, bei der ich den ausgelösten Fehler alarmiere, wird undefined
der Statuscode 500 angezeigt.
Ich bin mir nicht sicher, wo ich falsch liege. Was kann ich tun, um dieses Problem zu beheben?
quelle
xhr.responseJSON
. : DRegler:
Skript anzeigen:
quelle
response.StatusCode = (int)HttpStatusCode.InternalServerError;
undresponse.StatusDescription = filterContext.Exception.Message;
ServerSide:
ClientSide:
Allgemeine Ajax-Fehlerbehandlung
Wenn ich eine allgemeine Fehlerbehandlung für alle Ajax-Anforderungen durchführen muss. Ich werde den AjaxError-Handler setzen und den Fehler in einem Div mit dem Namen errorcontainer oben im HTML-Inhalt anzeigen.
quelle
Sie müssen das
responseText
in JSON konvertieren . Verwenden von JQuery:quelle
Wenn Sie asp.net aufrufen, wird der Titel der Fehlermeldung zurückgegeben:
Ich habe nicht alle formatErrorMessage selbst geschrieben, aber ich finde es sehr nützlich.
quelle
Dies ist, was ich getan habe und es funktioniert bisher in einer MVC 5-Anwendung.
Der Rückgabetyp des Controllers ist ContentResult.
Und auf der Clientseite sieht die Ajax-Funktion so aus
quelle
Wenn jemand wie 2016 hier ist, um die Antwort zu erhalten, verwenden Sie diese
.fail()
für die Fehlerbehandlung, da.error()
sie ab jQuery 3.0 veraltet istIch hoffe, es hilft
quelle
jqXHR.error()
ist in jQuery 3.0 veraltet (tatsächlich entfernt), aber dieerror
undsuccess
Rückrufe auf$.ajax()
sind meines Wissens nicht veraltet.Eine allgemeine / wiederverwendbare Lösung
Diese Antwort dient als zukünftige Referenz für alle, die auf dieses Problem stoßen. Die Lösung besteht aus zwei Dingen:
ModelStateException
, die ausgelöst wird, wenn die Validierung auf dem Server fehlschlägt (der Modellstatus meldet Validierungsfehler, wenn wir Datenanmerkungen verwenden und stark typisierte Controller-Aktionsparameter verwenden).HandleModelStateExceptionAttribute
, der benutzerdefinierte Ausnahmen abfängt und den HTTP-Fehlerstatus mit Modellstatusfehler im Hauptteil zurückgibtDies bietet die optimale Infrastruktur für jQuery Ajax-Aufrufe, um ihr volles Potenzial mit
success
underror
Handlern auszuschöpfen .Client-seitiger Code
Serverseitiger Code
Das gesamte Problem wird in diesem Blog-Beitrag beschrieben, in dem Sie den gesamten Code finden, um dies in Ihrer Anwendung auszuführen.
quelle
Ich fand das nett, weil ich die vom Server gesendete Nachricht analysieren und dem Benutzer eine freundliche Nachricht ohne Stacktrace anzeigen konnte ...
quelle
sowie
quelle
Dies wird wahrscheinlich dadurch verursacht, dass die JSON-Feldnamen keine Anführungszeichen haben.
Ändern Sie die JSON-Struktur von:
zu:
quelle
Ich glaube, der Ajax-Antworthandler verwendet den HTTP-Statuscode, um zu überprüfen, ob ein Fehler aufgetreten ist.
Wenn Sie also nur eine Java-Ausnahme für Ihren serverseitigen Code auslösen, die HTTP-Antwort jedoch keinen 500-Statuscode jQuery (oder in diesem Fall wahrscheinlich XMLHttpRequest) hat Objekt) einfach davon aus, dass alles in Ordnung war.
Ich sage das, weil ich in ASP.NET ein ähnliches Problem hatte, bei dem ich so etwas wie eine ArgumentException ausgelöst habe ("Weiß nicht, was ich tun soll ..."), aber der Fehlerhandler nicht ausgelöst hat.
Ich habe dann
Response.StatusCode
entweder 500 oder 200 eingestellt, ob ich einen Fehler hatte oder nicht.quelle
jQuery.parseJSON ist nützlich für Erfolg und Fehler.
quelle
Sie haben ein JSON-Objekt der ausgelösten Ausnahme im xhr-Objekt. Benutz einfach
Das JSON-Objekt stellt zwei weitere Eigenschaften bereit: 'ExceptionType' und 'StackTrace'
quelle
Diese Funktion generiert grundsätzlich eindeutige zufällige API-Schlüssel. Falls dies nicht der Fall ist, wird ein Popup-Dialogfeld mit einer Fehlermeldung angezeigt
In Ansichtsseite:
Vom Controller:
Der optionale Rückrufparameter gibt eine Rückruffunktion an, die ausgeführt werden soll, wenn die load () -Methode abgeschlossen ist. Die Rückruffunktion kann verschiedene Parameter haben:
Eine Funktion, die aufgerufen werden soll, wenn die Anforderung fehlschlägt. Die Funktion erhält drei Argumente: Das Objekt jqXHR (in jQuery 1.4.x, XMLHttpRequest), eine Zeichenfolge, die den aufgetretenen Fehlertyp beschreibt, und ein optionales Ausnahmeobjekt, falls eines aufgetreten ist. Mögliche Werte für das zweite Argument (neben null) sind "timeout", "error", "abort" und "parsererror". Wenn ein HTTP-Fehler auftritt, empfängt errorThrown den Textteil des HTTP-Status, z. B. "Nicht gefunden" oder "Interner Serverfehler". Ab jQuery 1.5 kann die Fehlereinstellung eine Reihe von Funktionen akzeptieren. Jede Funktion wird nacheinander aufgerufen. Hinweis: Dieser Handler wird nicht für domänenübergreifende Skript- und domänenübergreifende JSONP-Anforderungen aufgerufen.
quelle
quelle
Wirf eine neue Ausnahme auf den Server mit:
Response.StatusCode = 500
Response.StatusDescription = ex.Message ()
Ich glaube, dass die StatusDescription an den Ajax-Aufruf zurückgegeben wird ...
Beispiel:
quelle
Obwohl es viele Jahre her ist, dass diese Frage gestellt wird, finde ich immer noch nicht
xhr.responseText
die Antwort, nach der ich gesucht habe. Es gab mir einen String im folgenden Format zurück:was ich den Benutzern definitiv nicht zeigen möchte. Was ich gesucht habe, ist ungefähr so:
xhr.responseJSON.message
gibt mir die genaue Nachricht vom Json-Objekt, die den Benutzern angezeigt werden kann.quelle
Wenn es ein Formular gibt, senden Sie es mit validate
Verwenden Sie einfach den Rest des Codes
... ... });
quelle
Zuerst müssen wir <serviceDebug includeExceptionDetailInFaults = "True" /> in web.config setzen:
Darüber hinaus müssen Sie auf jquery-Ebene im Fehlerteil eine Fehlerantwort analysieren, die Ausnahmen enthält wie:
Mit r.Message können Sie dann den Ausnahmetext tatsächlich anzeigen.
Überprüfen Sie den vollständigen Code: http://www.codegateway.com/2012/04/jquery-ajax-handle-exception-thrown-by.html
quelle