微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 处理来自Servlet的Jquery AJAX响应中的异常

我的servlet代码

try{
    //something
    response.setStatus(201);
    out.print("Data successfully saved");
}
catch(SomeException e){
    response.sendError(400, e.getMessage());
}

我的JQuery Ajax函数有成功和错误块,如下所示:

$.ajax({
    type:'POST',
    data: {
        //some data to be passed
    },
    dataType: 'text',
    url:'AjaxController',
    success: function(response){
        alert(response);
    },
    error: function(jqXHR, textStatus, message) {
        //error handling
    },
    complete: function(){
        //window.location.reload(true);
    } 
});

servlet中的异常可以有不同的消息,所以我的目的只是将状态代码和消息传递给客户端,以便它可以在一个范围内显示.
如果成功,成功块正在接收响应,我看到我在out.print()中写的任何内容都在其中.

但是如果出现错误显示消息,我有两个选择:

>将成功写入out.print并在Ajax函数中成功阻止,使用状态代码编写多个检查,并决定是显示成功消息还是错误消息.
我并不赞成这一点,因为我感觉它紧密耦合,并且仍然在执行成功操作时执行错误的请求或异常.
>使用response.sendError(status_code :: int,e.getMessage():: String)
即使这确保调用Ajax中的错误块,但是sendError API创建了一个HTML页面,放入我的消息并发送它,我无法直接访问它.所以在AJAX中,我将被迫编写一个解析器来获取异常消息.这在我看来也不是NO.

我该如何实现这种异常处理?

我试图以最好的方式解释,如果需要更多信息,请告诉我.它是一个简单的API,客户端使用表单数据调用servlet,表单数据在服务器中创建/更新,或者在某些条件不匹配时失败.并且在一个范围内,在同一表单页面显示该成功或异常信息.

解决方法:

我试过这个,发现状态400的异常现在进入错误块,我能够在错误块内部用jqXHR.responseText检索消息.我已经做了:

response.setStatus(400);
out.print(e.getMessage());
out.flush();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐