Czy jest jakiś sposób, aby wyświetlić niestandardowe komunikaty wyjątków jako ostrzeżenia w komunikacie o błędzie AJAX jQuery?
Na przykład, jeśli chcę wyjątek po stronie serwera poprzez poprzeczne przez throw new ApplicationException("User name already exists");
, chcę złapać ten komunikat ( „nazwa użytkownika już istnieje”) w komunikacie o błędzie jQuery AJAX.
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);
}
});
}
});
Przy drugim alercie, w którym ostrzegam o zgłoszonym błędzie, otrzymuję, undefined
a kod stanu to 500.
Nie jestem pewien, gdzie się mylę. Co mogę zrobić, aby rozwiązać ten problem?
jquery
ajax
custom-exceptions
Roman C.
źródło
źródło
xhr.responseJSON
. : DKontroler:
Wyświetl skrypt:
źródło
response.StatusCode = (int)HttpStatusCode.InternalServerError;
iresponse.StatusDescription = filterContext.Exception.Message;
Po stronie serwera:
Strona klienta:
Ogólna obsługa błędów Ajax
Jeśli muszę zrobić ogólną obsługę błędów dla wszystkich żądań ajax. Ustawię moduł obsługi ajaxError i wyświetlę błąd na div o nazwie errorcontainer na górze zawartości HTML.
źródło
Musisz przekonwertować na
responseText
JSON. Za pomocą JQuery:źródło
Wywołanie asp.net spowoduje zwrócenie tytułu komunikatu o błędzie:
Sam nie napisałem całego formatuErrorMessage, ale uważam, że jest bardzo przydatny.
źródło
Tak właśnie zrobiłem i działa do tej pory w aplikacji MVC 5.
Typem zwrotu kontrolera jest ContentResult.
A po stronie klienta tak wygląda funkcja ajax
źródło
Jeśli ktoś jest tutaj, jak w 2016 r. W celu uzyskania odpowiedzi, użyj
.fail()
do obsługi błędów, ponieważ.error()
jest przestarzały od jQuery 3.0Mam nadzieję, że to pomoże
źródło
jqXHR.error()
jest przestarzały (faktycznie usunięty) w jQuery 3.0, ale o ile wiem, wywołania zwrotneerror
i nie są przestarzałe.success
$.ajax()
Rozwiązanie ogólne / wielokrotnego użytku
Ta odpowiedź jest dostępna w przyszłości dla wszystkich, którzy napotkają ten problem. Rozwiązanie składa się z dwóch rzeczy:
ModelStateException
który jest generowany, gdy sprawdzanie poprawności na serwerze nie powiedzie się (stan modelu zgłasza błędy sprawdzania poprawności, gdy używamy adnotacji danych i parametrów działania kontrolera o silnym typie)HandleModelStateExceptionAttribute
który przechwytuje niestandardowy wyjątek i zwraca stan błędu HTTP z błędem stanu modelu w treściZapewnia to optymalną infrastrukturę dla wywołań Ajax jQuery, aby wykorzystać ich pełny potencjał
success
ierror
procedury obsługi.Kod po stronie klienta
Kod po stronie serwera
Cały problem jest szczegółowo opisany w tym poście na blogu, w którym można znaleźć cały kod do uruchomienia tego w aplikacji.
źródło
Uznałem, że jest to miłe, ponieważ mogłem przeanalizować wiadomość wysyłaną z serwera i wyświetlić przyjazną wiadomość dla użytkownika bez stosu śledzenia ...
źródło
Jak na przykład
źródło
Jest to prawdopodobnie spowodowane brakiem cudzysłowów w nazwach pól JSON.
Zmień strukturę JSON z:
do:
źródło
Uważam, że moduł obsługi odpowiedzi Ajax używa kodu stanu HTTP, aby sprawdzić, czy wystąpił błąd.
Jeśli więc po prostu rzucisz wyjątek Java na kod po stronie serwera, ale odpowiedź HTTP nie ma kodu statusu jQuery 500 (lub w tym przypadku prawdopodobnie obiekt XMLHttpRequest ) po prostu przyjmie, że wszystko jest w porządku.
Mówię to, ponieważ miałem podobny problem w programie ASP.NET, w którym zgłaszałem wyjątek ArgumentException („Nie wiem, co robić ...”), ale program obsługi błędów nie uruchamiał się.
Następnie ustawiłem na
Response.StatusCode
500 lub 200, niezależnie od tego, czy wystąpił błąd, czy nie.źródło
Plik jQuery.parseJSON jest przydatny w przypadku powodzenia i błędów.
źródło
Zgłoszono obiekt JSON wyjątku w obiekcie xhr. Po prostu użyj
Obiekt JSON udostępnia dwie inne właściwości: „ExceptionType” i „StackTrace”
źródło
Ta funkcja generuje unikalne losowe klucze API, a jeśli nie, pojawi się wyskakujące okno dialogowe z komunikatem o błędzie
W widoku strony:
Z kontrolera:
Opcjonalny parametr wywołania zwrotnego określa funkcję wywołania zwrotnego, która ma być uruchomiona po zakończeniu metody load (). Funkcja oddzwaniania może mieć różne parametry:
Funkcja, która ma zostać wywołana, jeśli żądanie nie powiedzie się. Funkcja otrzymuje trzy argumenty: obiekt jqXHR (w jQuery 1.4.x, XMLHttpRequest), łańcuch opisujący typ błędu, który wystąpił, oraz opcjonalny obiekt wyjątku, jeśli taki wystąpił. Możliwe wartości drugiego argumentu (oprócz null) to „limit czasu”, „błąd”, „przerwanie” i „analiza składni”. Gdy wystąpi błąd HTTP, errorThrown otrzymuje tekstową część statusu HTTP, taką jak „Nie znaleziono” lub „Wewnętrzny błąd serwera”. Począwszy od jQuery 1.5, ustawienie błędu może akceptować tablicę funkcji. Każda funkcja będzie wywoływana kolejno. Uwaga: Ten moduł obsługi nie jest wywoływany dla skryptów między domenami i żądań JSONP między domenami.
źródło
źródło
Rzuć nowy wyjątek na serwer, używając:
Response.StatusCode = 500
Response.StatusDescription = ex.Message ()
Wierzę, że StatusDescription jest zwracany do wywołania Ajax ...
Przykład:
źródło
Chociaż minęło wiele lat, odkąd zadano to pytanie, wciąż nie znajduję
xhr.responseText
odpowiedzi, której szukałem. Zwrócił mi ciąg znaków w następującym formacie:których zdecydowanie nie chcę pokazywać użytkownikom. To, czego szukałem, jest jak poniżej:
xhr.responseJSON.message
daje mi dokładną wiadomość z obiektu Json, którą można wyświetlić użytkownikom.źródło
Jeśli istnieje jakikolwiek formularz, należy go przesłać z potwierdzeniem
po prostu użyj reszty kodu
... ... });
źródło
Najpierw musimy ustawić <serviceDebug includeExceptionDetailInFaults = "True" /> w pliku web.config:
Oprócz tego na poziomie jquery w części błędu należy przeanalizować odpowiedź na błąd, która zawiera wyjątek, taki jak:
Następnie za pomocą r.Message możesz faktycznie wyświetlić tekst wyjątku.
Sprawdź pełny kod: http://www.codegateway.com/2012/04/jquery-ajax-handle-exception-thrown-by.html
źródło