¿Hay alguna forma de mostrar mensajes de excepción personalizados como alerta en mi mensaje de error jQuery AJAX?
Por ejemplo, si quiero lanzar una excepción en el lado servidor a través de puntales por throw new ApplicationException("User name already exists");
, quiero coger este mensaje (nombre de usuario ya existe ') en el mensaje de error 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);
}
});
}
});
En la segunda alerta, donde alerta el error arrojado, recibo undefined
y el código de estado es 500.
No estoy seguro de a dónde me estoy equivocando. ¿Qué puedo hacer para solucionar este problema?
jquery
ajax
custom-exceptions
Romana C
fuente
fuente
xhr.responseJSON
. : DControlador:
Ver guión:
fuente
response.StatusCode = (int)HttpStatusCode.InternalServerError;
yresponse.StatusDescription = filterContext.Exception.Message;
Lado del servidor:
Lado del cliente:
Manejo genérico de errores Ajax
Si necesito hacer un manejo genérico de errores para todas las solicitudes ajax. Estableceré el controlador ajaxError y mostraré el error en un div llamado errorcontainer en la parte superior del contenido html.
fuente
Necesita convertir el
responseText
a JSON. Usando JQuery:fuente
Si realiza una llamada a asp.net, esto devolverá el título del mensaje de error:
No escribí todo el mensaje FormatErrorMessage, pero lo encuentro muy útil.
fuente
Esto es lo que hice y funciona hasta ahora en una aplicación MVC 5.
El tipo de retorno del controlador es ContentResult.
Y en el lado del cliente, así es como se ve la función ajax
fuente
Si alguien está aquí como en 2016 para obtener la respuesta, úsela
.fail()
para el manejo de errores, ya que.error()
está obsoleto a partir de jQuery 3.0Espero que ayude
fuente
jqXHR.error()
está en desuso (en realidad eliminado) en jQuery 3.0, pero las devoluciones de llamadaerror
y no están en desuso, por lo que yo sé.success
$.ajax()
Una solución general / reutilizable
Esta respuesta se proporciona para referencia futura a todos aquellos que se topan con este problema. La solución consta de dos cosas:
ModelStateException
que se produce cuando la validación falla en el servidor (el estado del modelo informa errores de validación cuando usamos anotaciones de datos y utilizamos parámetros de acción de controlador con tipo fuerte)HandleModelStateExceptionAttribute
que detecta una excepción personalizada y devuelve el estado de error HTTP con un error de estado del modelo en el cuerpoEsto proporciona la infraestructura óptima para que las llamadas jQuery Ajax utilicen todo su potencial con
success
yerror
manejadores.Código del lado del cliente
Código del lado del servidor
Todo el problema se detalla en esta publicación de blog donde puede encontrar todo el código para ejecutar esto en su aplicación.
fuente
Encontré que esto era bueno porque podía analizar el mensaje que estaba enviando desde el servidor y mostrar un mensaje amigable al usuario sin el seguimiento de la pila ...
fuente
como
fuente
Esto probablemente se deba a que los nombres de campo JSON no tienen comillas.
Cambie la estructura JSON de:
a:
fuente
Creo que el controlador de respuesta de Ajax usa el código de estado HTTP para verificar si hubo un error.
Entonces, si solo arroja una excepción de Java en el código del lado del servidor, pero la respuesta HTTP no tiene un código de estado 500 jQuery (o en este caso probablemente XMLHttpRequest) objeto ) simplemente asumirá que todo estaba bien.
Lo digo porque tuve un problema similar en ASP.NET donde estaba lanzando algo como una excepción ArgumentException ("No sé qué hacer ...") pero el controlador de errores no se estaba disparando.
Luego configuré
Response.StatusCode
500 o 200 si tuve un error o no.fuente
jQuery.parseJSON es útil para el éxito y el error.
fuente
Tiene un objeto JSON de la excepción lanzada, en el objeto xhr. Solo usa
El objeto JSON expone otras dos propiedades: 'ExceptionType' y 'StackTrace'
fuente
Esta función básicamente genera claves API aleatorias únicas y, en caso de que no lo haga, aparecerá un cuadro de diálogo emergente con un mensaje de error
En la página de visualización:
Del controlador:
El parámetro opcional de devolución de llamada especifica una función de devolución de llamada que se ejecutará cuando se complete el método load (). La función de devolución de llamada puede tener diferentes parámetros:
Una función que se llamará si la solicitud falla. La función recibe tres argumentos: el objeto jqXHR (en jQuery 1.4.x, XMLHttpRequest), una cadena que describe el tipo de error que se produjo y un objeto de excepción opcional, si se produjo uno. Los valores posibles para el segundo argumento (además de nulo) son "timeout", "error", "abort" y "parsererror". Cuando se produce un error HTTP, errorThrown recibe la parte textual del estado HTTP, como "No encontrado" o "Error interno del servidor". A partir de jQuery 1.5, la configuración de error puede aceptar una variedad de funciones. Cada función se llamará por turno. Nota: No se llama a este controlador para las solicitudes JSONP entre dominios y secuencias de comandos entre dominios.
fuente
fuente
Lanza una nueva excepción en el servidor usando:
Response.StatusCode = 500
Response.StatusDescription = ex.Message ()
Creo que StatusDescription se devuelve a la llamada Ajax ...
Ejemplo:
fuente
Aunque han pasado muchos años desde que se hizo esta pregunta, todavía no encuentro
xhr.responseText
la respuesta que estaba buscando. Me devolvió una cadena en el siguiente formato:que definitivamente no quiero mostrar a los usuarios. Lo que estaba buscando es algo como a continuación:
xhr.responseJSON.message
me da el mensaje exacto del objeto Json que se puede mostrar a los usuarios.fuente
Si hay algún formulario se envía con validar
simplemente usa el resto del código
... ... });
fuente
Primero necesitamos establecer <serviceDebug includeExceptionDetailInFaults = "True" /> en web.config:
Además de eso en el nivel de jquery en la parte de error, debe analizar la respuesta de error que contiene una excepción como:
Luego, utilizando r.Message, puede mostrar realmente texto de excepción.
Verifique el código completo: http://www.codegateway.com/2012/04/jquery-ajax-handle-exception-thrown-by.html
fuente