Servlet Ajax全局异常处理

san*_*den 3 error-handling jquery servlets

我有一个AJAX调用的全局处理程序

$.ajaxSetup({
    error: function(xhr, textStatus, errorThrown) {
             //do something 
    }
});
Run Code Online (Sandbox Code Playgroud)

如果出现错误,我的servlet过滤器会发送一个特定的错误

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
        ServletException {

    if(somethingwrong()) {
        response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "unavailableimage");    
    }
}
Run Code Online (Sandbox Code Playgroud)

你会建议做点什么吗?

$.ajaxError({
    error: function(xhr, textStatus, errorThrown) {
        if (xhr.status == 408) {
            //doSomething
        }
        else if xhr.responseText.contains("unavailableimage"){
            //doSomething
        }
    }
}); 
Run Code Online (Sandbox Code Playgroud)

因为我认为每个浏览器中的responseText都不同.

Bal*_*usC 7

响应机构可通过xhr.responseText.

但是,HttpServletResponse#sendError()(< - 单击链接以自己阅读Javadoc)将使用servletcontainer的默认错误页面模板或您定义的自定义错误页面模板web.xml.这是一个HTML文档,因此您必须自己解析.

根据您对其他答案的评论,您似乎正在使用Tomcat并检索其默认错误页面; 该消息可用作第二个<u>元素的第一个元素<p>.所以这应该做:

var errorMessage = $(xhr.responseText).filter('p:eq(1)').find('u').text();

if (errorMessage == 'unavailableimage') {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

您只需要记住,这种方式与(默认)错误页面的标记紧密相关.更好的是不使用HttpServletResponse#sendError(),但只需设置状态HttpServletResponse#setStatus()(< - 是,单击它以读取javadoc,答案就在那里)并自己将错误消息写入响应正文:

response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
response.getWriter().write("unavailableimage");
Run Code Online (Sandbox Code Playgroud)

这样xhr.responseText就是这样unavailableimage.

if (xhr.responseText == 'unavailableimage') {
    // ...
}
Run Code Online (Sandbox Code Playgroud)