Existe-t-il un moyen d'afficher des messages d'exception personnalisés sous forme d'alerte dans mon message d'erreur jQuery AJAX?
Par exemple, si je veux lever une exception côté serveur via Struts by throw new ApplicationException("User name already exists");
, je veux attraper ce message («le nom d'utilisateur existe déjà») dans le message d'erreur 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);
}
});
}
});
Sur la deuxième alerte, où j'alerte l'erreur levée, je reçois undefined
et le code d'état est 500.
Je ne sais pas où je vais mal. Que puis-je faire pour résoudre ce problème?
jquery
ajax
custom-exceptions
Roman C
la source
la source
xhr.responseJSON
. : DManette:
Voir le script:
la source
response.StatusCode = (int)HttpStatusCode.InternalServerError;
etresponse.StatusDescription = filterContext.Exception.Message;
Du côté serveur:
Côté client:
Gestion des erreurs Ajax générique
Si j'ai besoin de faire un traitement d'erreur générique pour toutes les demandes ajax. Je vais définir le gestionnaire ajaxError et afficher l'erreur sur un div nommé errorcontainer en haut du contenu html.
la source
Vous devez convertir le
responseText
JSON. Utilisation de JQuery:la source
Si vous appelez asp.net, cela renverra le titre du message d'erreur:
Je n'ai pas écrit moi-même tout formatErrorMessage mais je le trouve très utile.
la source
C'est ce que j'ai fait et cela fonctionne jusqu'à présent dans une application MVC 5.
Le type de retour du contrôleur est ContentResult.
Et côté client, voici à quoi ressemble la fonction ajax
la source
Si quelqu'un est ici comme en 2016 pour la réponse, utilisez
.fail()
pour la gestion des erreurs car il.error()
est obsolète à partir de jQuery 3.0J'espère que ça aide
la source
jqXHR.error()
est obsolète (réellement supprimé) dans jQuery 3.0, mais les rappelserror
et ne sont pas obsolètes, pour autant que je sache.success
$.ajax()
Une solution générale / réutilisable
Cette réponse est fournie pour référence future à tous ceux qui se heurtent à ce problème. La solution se compose de deux choses:
ModelStateException
qui est levée lorsque la validation échoue sur le serveur (l'état du modèle signale des erreurs de validation lorsque nous utilisons des annotations de données et utilisons des paramètres d'action de contrôleur typés forts)HandleModelStateExceptionAttribute
qui intercepte une exception personnalisée et renvoie le statut d'erreur HTTP avec l'erreur d'état du modèle dans le corpsCela fournit l'infrastructure optimale pour que les appels jQuery Ajax utilisent leur plein potentiel avec
success
et leserror
gestionnaires.Code côté client
Code côté serveur
L'ensemble du problème est détaillé dans cet article de blog où vous pouvez trouver tout le code pour l'exécuter dans votre application.
la source
J'ai trouvé que c'était bien parce que je pouvais analyser le message que j'envoyais du serveur et afficher un message convivial à l'utilisateur sans le stacktrace ...
la source
tel que
la source
Cela est probablement dû au fait que les noms de champs JSON n'ont pas de guillemets.
Changez la structure JSON de:
à:
la source
Vous avez un objet JSON de l'exception levée, dans l'objet xhr. Utilisez simplement
L'objet JSON expose deux autres propriétés: 'ExceptionType' et 'StackTrace'
la source
Je crois que le gestionnaire de réponse Ajax utilise le code d'état HTTP pour vérifier s'il y a eu une erreur.
Donc, si vous jetez simplement une exception Java sur votre code côté serveur mais que la réponse HTTP n'a pas de code d'état 500 jQuery (ou dans ce cas probablement l' objet XMLHttpRequest ) supposera simplement que tout allait bien.
Je dis cela parce que j'avais un problème similaire dans ASP.NET où je lançais quelque chose comme une ArgumentException ("Je ne sais pas quoi faire ...") mais le gestionnaire d'erreurs ne se déclenche pas.
J'ai ensuite réglé le
Response.StatusCode
sur 500 ou 200, que j'aie ou non une erreur.la source
jQuery.parseJSON est utile pour le succès et l'erreur.
la source
Cette fonction génère essentiellement des clés API aléatoires uniques et dans le cas contraire, une boîte de dialogue contextuelle avec un message d'erreur apparaît.
Dans la page d'affichage:
Du contrôleur:
Le paramètre de rappel facultatif spécifie une fonction de rappel à exécuter lorsque la méthode load () est terminée. La fonction de rappel peut avoir différents paramètres:
Une fonction à appeler si la demande échoue. La fonction reçoit trois arguments: l'objet jqXHR (dans jQuery 1.4.x, XMLHttpRequest), une chaîne décrivant le type d'erreur qui s'est produite et un objet d'exception facultatif, le cas échéant. Les valeurs possibles pour le deuxième argument (outre null) sont "timeout", "error", "abort" et "parsererror". Lorsqu'une erreur HTTP se produit, errorThrown reçoit la partie textuelle de l'état HTTP, telle que "Introuvable" ou "Erreur de serveur interne". Depuis jQuery 1.5, le paramètre d'erreur peut accepter un tableau de fonctions. Chaque fonction sera appelée tour à tour. Remarque: ce gestionnaire n'est pas appelé pour les requêtes de script inter-domaine et JSONP inter-domaine.
la source
la source
Lancez une nouvelle exception sur le serveur en utilisant:
Response.StatusCode = 500
Response.StatusDescription = ex.Message ()
Je crois que le StatusDescription est retourné à l'appel Ajax ...
Exemple:
la source
Bien que cela fait de nombreuses années que cette question ne soit posée, je ne trouve toujours pas
xhr.responseText
la réponse que je cherchais. Il m'a renvoyé une chaîne au format suivant:que je ne veux absolument pas montrer aux utilisateurs. Ce que je cherchais est quelque chose comme ci-dessous:
xhr.responseJSON.message
me donne le message exact de l'objet Json qui peut être montré aux utilisateurs.la source
S'il y a un formulaire est soumis avec valider
utilisez simplement le reste du code
... ... });
la source
Nous devons d'abord définir <serviceDebug includeExceptionDetailInFaults = "True" /> dans web.config:
En plus de cela au niveau jquery dans la partie erreur, vous devez analyser la réponse d'erreur qui contient une exception comme:
Ensuite, en utilisant r.Message, vous pouvez réellement afficher le texte d'exception.
Vérifiez le code complet: http://www.codegateway.com/2012/04/jquery-ajax-handle-exception-thrown-by.html
la source