【发布时间】:2023-03-29 16:15:01
【问题描述】:
直截了当:您将如何处理 jQuery 的 ajax 请求中的服务器端 HTTP 4nn/5nn 错误?此案例涉及服务器端的 JSP/Servlet Web 应用程序。这里我不是在谈论诸如NullPointerException 等琐碎的运行时异常。假设它们都得到了完美的处理。这种 HTTP 4nn/5nn 错误的一个很好的例子是 401 未授权(用户权限不足)和 500 内部服务器错误(数据库关闭、I/O 错误、Errors 等)。假设它们不能(或不应该)在编码级别被捕获。
现在我刚刚在web.xml 中声明了一个<error-page> 用于此类错误。它基本上将请求转发到预定义的 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();
}
虽然它工作得很好,但对我来说就像一个黑客。用 HTTP 错误页面的内容替换整个文档。但这也是你会遵循的方式吗?如果没有,您能否详细说明为什么不以及您更喜欢哪种方式?我看到的唯一替代方法是使用 JS 显示一些警报/消息框来通知用户有关无法解决的错误,但用户可以将其关闭并继续页面,而这是不可能的。
【问题讨论】:
-
如果您使用自定义模式而不是 Alert,例如 jqModal 或 simpleModal,您可以将其设置为用户无法关闭/关闭它。如果错误不可恢复,您可以添加自己的按钮以将用户返回到主页、联系页面或您想要的任何其他页面。如果错误 is 可恢复(您提到数据库已关闭,可能会重新启动),那么一个不错的 Please wait and try again later 消息可能就足够了(允许用户关闭对话框并重试)。
标签: jquery jsp servlets error-handling