我的AJAX调用有一个全局处理程序
$.ajaxSetup({
error: function(xhr, textStatus, errorThrown) {
//do something
}
});
如果出现错误,我的servlet过滤器会发送一个特定错误
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
ServletException {
if(somethingwrong()) {
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "unavailableimage");
}
}
你会建议做点什么吗
$.ajaxError({
error: function(xhr, textStatus, errorThrown) {
if (xhr.status == 408) {
//doSomething
}
else if xhr.responseText.contains("unavailableimage"){
//doSomething
}
}
});
因为我认为每个浏览器中的responseText都不同。
答案 0 :(得分: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') {
// ...
}
您只需要记住,这种方式与(默认)错误页面的标记紧密相关。最好不要使用HttpServletResponse#sendError()
,而只需按HttpServletResponse#setStatus()
设置状态(&lt; - 是,单击它以读取javadoc,答案就在那里)并将错误消息写入响应正文自己:
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
response.getWriter().write("unavailableimage");
这样xhr.responseText
就是unavailableimage
。
if (xhr.responseText == 'unavailableimage') {
// ...
}
答案 1 :(得分:1)
在我的项目中,我正在使用此函数来调试ajax:
$.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版本(&lt; 1.5.2)
或使用json:var responseText = $.parseJSON(x.responseText);