jQuery Ajax error handling, show custom exception messages

前端 未结 21 2791
滥情空心
滥情空心 2020-11-22 01:50

Is there some way I can show custom exception messages as an alert in my jQuery AJAX error message?

For example, if I want to throw an exception on the server side v

相关标签:
21条回答
  • 2020-11-22 02:18

    I found this to be nice because I could parse out the message I was sending from the server and display a friendly message to the user without the stacktrace...

    error: function (response) {
          var r = jQuery.parseJSON(response.responseText);
          alert("Message: " + r.Message);
          alert("StackTrace: " + r.StackTrace);
          alert("ExceptionType: " + r.ExceptionType);
    }
    
    0 讨论(0)
  • 2020-11-22 02:18

    First we need to set <serviceDebug includeExceptionDetailInFaults="True" /> in web.config:

    <serviceBehaviors> 
     <behavior name=""> 
      <serviceMetadata httpGetEnabled="true" /> 
        **<serviceDebug includeExceptionDetailInFaults="true" />** 
     </behavior> 
    </serviceBehaviors>
    

    In addition to that at jquery level in error part you need to parse error response that contains exception like:

    .error(function (response, q, t) { 
      var r = jQuery.parseJSON(response.responseText); 
    }); 
    

    Then using r.Message you can actully show exception text.

    Check complete code: http://www.codegateway.com/2012/04/jquery-ajax-handle-exception-thrown-by.html

    0 讨论(0)
  • 2020-11-22 02:19
    $("#save").click(function(){
        $("#save").ajaxError(function(event,xhr,settings,error){
            $(this).html{'error: ' (xhr ?xhr.status : '')+ ' ' + (error ? error:'unknown') + 'page: '+settings.url);
        });
    });
    
    0 讨论(0)
  • 2020-11-22 02:21

    ServerSide:

         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
    
               }
     }
    

    ClientSide:

     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");
                   }
              }
        }); 
    

    Generic Ajax Error Handling

    If I need to do some generic error handling for all the ajax requests. I will set the ajaxError handler and display the error on a div named errorcontainer on the top of html content.

    $("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);
                     });
    
    0 讨论(0)
  • 2020-11-22 02:22

    jQuery.parseJSON is useful for success and error.

    $.ajax({
        url: "controller/action",
        type: 'POST',
        success: function (data, textStatus, jqXHR) {
            var obj = jQuery.parseJSON(jqXHR.responseText);
            notify(data.toString());
            notify(textStatus.toString());
        },
        error: function (data, textStatus, jqXHR) { notify(textStatus); }
    });
    
    0 讨论(0)
  • 2020-11-22 02:22

    Although it has been many years since this question is asked, I still don't find xhr.responseText as the answer I was looking for. It returned me string in the following format:

    "{"error":true,"message":"The user name or password is incorrect"}"
    

    which I definitely don't want to show to the users. What I was looking for is something like below:

    alert(xhr.responseJSON.message);
    

    xhr.responseJSON.message gives me the exact message from the Json Object which can be shown to the users.

    0 讨论(0)
提交回复
热议问题