首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Servlet Ajax全局异常处理

Servlet Ajax全局异常处理
EN

Stack Overflow用户
提问于 2011-11-10 18:28:56
回答 2查看 3.5K关注 0票数 3

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

代码语言:javascript
复制
$.ajaxSetup({
    error: function(xhr, textStatus, errorThrown) {
             //do something 
    }
});

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

代码语言:javascript
复制
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
        ServletException {

    if(somethingwrong()) {
        response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "unavailableimage");    
    }
}

你会建议做一些像这样的事情吗

代码语言:javascript
复制
$.ajaxError({
    error: function(xhr, textStatus, errorThrown) {
        if (xhr.status == 408) {
            //doSomething
        }
        else if xhr.responseText.contains("unavailableimage"){
            //doSomething
        }
    }
}); 

因为我认为每个浏览器的responseText都是不同的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-10 18:54:34

响应体可以通过xhr.responseText获得。

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

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

代码语言:javascript
复制
var errorMessage = $(xhr.responseText).filter('p:eq(1)').find('u').text();

if (errorMessage == 'unavailableimage') {
    // ...
}

您只需记住,您以这种方式紧密地耦合到(默认)错误页面的标记。更好的方法是不使用HttpServletResponse#sendError(),而是通过HttpServletResponse#setStatus()设置状态( <--是,单击它来读取javadoc,答案就在那里),并自己将错误消息写入响应体:

代码语言:javascript
复制
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
response.getWriter().write("unavailableimage");

这样,xhr.responseText就是unavailableimage

代码语言:javascript
复制
if (xhr.responseText == 'unavailableimage') {
    // ...
}
票数 7
EN

Stack Overflow用户

发布于 2011-11-10 18:35:05

在我的项目中,我使用这个函数来调试ajax:

代码语言:javascript
复制
$.ajaxSetup({
        error:function(x,e){
            if(x.status==0){
                alert('You are offline!!\n Please Check Your Network.');
            }else if(x.status==404){
                alert('Requested URL not found.');
            }else if(x.status==500){
                alert('Internal Server Error.\n'+x.responseText););
            }else if(e=='parsererror'){
                alert('Error.\nParsing JSON Request failed.');
            }else if(e=='timeout'){
                alert('Request Time out.');
            }else {
                alert('Unknow Error.\n'+x.responseText);
            }
        }
    });

因此,使用您的代码,您可以测试x.responseText是否包含'unavailableimage',但通过错误代码和错误消息测试它会更好;)

另一种仅获取响应错误消息的方法是使用:var responseText = $.httpData(xhr),这取决于您的JQuery版本(< 1.5.2)

或者使用json:var responseText = $.parseJSON(x.responseText);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8078095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档