Manejo de errores de jQuery Ajax, muestra mensajes de excepción personalizados

Resuelto asked hace 16 años • 0 respuestas

¿Hay alguna manera de mostrar mensajes de excepción personalizados como una alerta en mi mensaje de error de jQuery AJAX?

Por ejemplo, si quiero generar una excepción en el lado del servidor a través de Struts by throw new ApplicationException("User name already exists");, quiero detectar este mensaje ('el nombre de usuario ya existe') en el mensaje de error de 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 en la devolución de llamada de error, donde alerto thrownError, recibo undefinedel xhr.statuscódigo 500.

No estoy seguro de dónde me estoy equivocando. ¿Qué puedo hacer para solucionar este problema?

 avatar Dec 18 '08 19:12
Aceptado

Asegúrate de configurar Response.StatusCodeun valor distinto de 200. Escribe el mensaje de excepción usando Response.Write, luego usa...

xhr.responseText

..en tu javascript.

Sprintstar avatar Jan 16 '2009 14:01 Sprintstar

Controlador:

public class ClientErrorHandler : FilterAttribute, IExceptionFilter
{
    public void OnException(ExceptionContext filterContext)
    {
        var response = filterContext.RequestContext.HttpContext.Response;
        response.Write(filterContext.Exception.Message);
        response.ContentType = MediaTypeNames.Text.Plain;
        filterContext.ExceptionHandled = true;
    }
}

[ClientErrorHandler]
public class SomeController : Controller
{
    [HttpPost]
    public ActionResult SomeAction()
    {
        throw new Exception("Error message");
    }
}

Ver guión:

$.ajax({
    type: "post", url: "/SomeController/SomeAction",
    success: function (data, text) {
        //...
    },
    error: function (request, status, error) {
        alert(request.responseText);
    }
});
AlexMAS avatar May 10 '2010 07:05 AlexMAS

Lado del servidor:

     doPost(HttpServletRequest request, HttpServletResponse response){ 
            try{ //logic
            }catch(ApplicationException exception){ 
               response.setStatus(400);
               response.getWriter().write(exception.getMessage());
               //just added semicolon to end of line

           }
 }

Lado del cliente:

 jQuery.ajax({// just showing error property
           error: function(jqXHR,error, errorThrown) {  
               if(jqXHR.status&&jqXHR.status==400){
                    alert(jqXHR.responseText); 
               }else{
                   alert("Something went wrong");
               }
          }
    }); 

Manejo de errores genéricos de Ajax

Si necesito hacer algún manejo de errores genérico para todas las solicitudes de ajax. Configuraré el controlador ajaxError y mostraré el error en un div llamado errorcontainer en la parte superior del contenido html.

$("div#errorcontainer")
    .ajaxError(
        function(e, x, settings, exception) {
            var message;
            var statusErrorMap = {
                '400' : "Server understood the request, but request content was invalid.",
                '401' : "Unauthorized access.",
                '403' : "Forbidden resource can't be accessed.",
                '500' : "Internal server error.",
                '503' : "Service unavailable."
            };
            if (x.status) {
                message =statusErrorMap[x.status];
                                if(!message){
                                      message="Unknown Error \n.";
                                  }
            }else if(exception=='parsererror'){
                message="Error.\nParsing JSON Request failed.";
            }else if(exception=='timeout'){
                message="Request Time out.";
            }else if(exception=='abort'){
                message="Request was aborted by the server";
            }else {
                message="Unknown Error \n.";
            }
            $(this).css("display","inline");
            $(this).html(message);
                 });
Sanjeev Kumar Dangi avatar Feb 25 '2012 17:02 Sanjeev Kumar Dangi