Bal*_*usC 19 error-handling jquery jsp servlets
要点:你如何处理jQuery的ajax请求中的服务器端HTTP 4nn/5nn错误?此案例涉及服务器端的JSP/Servlet Web应用程序.在这里,我不是在谈论琐碎的运行时异常,例如NullPointerException等等.假设他们都处理得很好.这种HTTP 4nn/5nn错误的一个很好的例子是401未授权(用户权限不足)和500内部服务器错误(数据库关闭,I/O错误,Errors等).假设他们不能(或不应该)在编码级别被捕获.
现在,我刚刚宣布了<error-page>在web.xml这些类型的错误.它基本上将请求转发到预定义的JSP/HTML错误页面,其中最终用户被告知发生了严重错误,并且用户可以联系xx@xx.xx以获得进一步的帮助.同一页面还显示有关错误/异常的全局详细信息.
它在常规HTTP请求中完美运行,但是如何使用jQuery在XMLHtttp请求中处理它?什么是最好的用户体验?对我来说,它只是显示整个错误页面,就好像它是一个普通的HTTP请求.我解决了它如下:
function init() {
$.ajaxSetup({
error: handleXhrError
});
}
function handleXhrError(xhr) {
document.open();
document.write(xhr.responseText);
document.close();
}
Run Code Online (Sandbox Code Playgroud)
虽然它完美无缺,但我觉得它像黑客一样.用HTTP错误页面的内容替换整个文档.但这也是你会遵循的方式吗?如果没有,你可以详细说明为什么不以及你更喜欢什么方式?我看到的唯一选择是使用JS显示一些警报/消息框以通知用户有关不可解析的错误,但是用户可以将其关闭并继续使用该页面,而这是不可能的.
毕竟,以与同步请求相同的方式处理异步请求上的错误对于用户体验是最佳的.只有
function handleXhrError(xhr) {
document.open();
document.write(xhr.responseText);
document.close();
}
Run Code Online (Sandbox Code Playgroud)
当您<script>需要加载和初始化的元素时,IE6/7/8中将失败.IE6/7/8即不会这样做.为了让IE做到这一点,你基本上需要保留当前<head>元素并且只替换它的子元素$("head").html(newHead).对<body>元素也应该这样做.
function handleXhrError(xhr) {
var newDocument = xhr.responseText;
$("head").html(newDocument.substring(newDocument.indexOf("<head>") + 6, newDocument.indexOf("</head>")));
$("body").html(newDocument.substring(newDocument.indexOf("<body>") + 6, newDocument.indexOf("</body>")));
}
Run Code Online (Sandbox Code Playgroud)
讨厌,但是$(xhr.responseText)当响应文本代表整个带有头部和身体的HTML文档时,不可能做到.当你<body>在错误页面模板上有一些属性时(例如ID,类等),不要忘记相应地改变子串索引.
| 归档时间: |
|
| 查看次数: |
4008 次 |
| 最近记录: |