如何处理jQuery的Ajax请求中的服务器端HTTP4NN/5NN错误?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (42)

要点:如何处理jQuery的ajax请求中的服务器端HTTP 4nn / 5nn错误?这种情况涉及服务器端的JSP / Servlet Web应用程序。不是在讨论如此小的运行时异常NullPointerException的前提下,假设他们都完美处理。这种HTTP 4nn / 5nn错误的一个很好的例子是401未授权(用户权限不足)和500内部服务器错误(数据库关闭,I / O错误Error,等等)。

现在,我刚刚发现了<error-page>web.xml这些类型的错误。它基本上将请求转发到预先定义的JSP / HTML错误页面,其中最终用户被告知发生了严重错误,并且用户可以联系xx@xx.xx以获得进一步帮助。同一页面还显示关于错误/异常的全局详细信息。

如何使用jQuery在XMLHttp请求中处理它?用户体验最好的是什么方法?对我而言,它只是显示整个错误页面,就像它是一个普通的HTTP请求一样。我如下所示代码解决了这个问题:

function init() {
    $.ajaxSetup({
        error: handleXhrError
    });
}

function handleXhrError(xhr) {
    document.open();
    document.write(xhr.responseText);
    document.close();
}

虽然它的功能完美,但感觉像是一种黑客技术。用HTTP错误页面的内容替换整个文档。我看到的唯一选择是使用JS来显示一些警告/消息框,以通知用户有关不可解决的错误,但用户可以解雇它并继续使用该页面,而这应该是不可能的。

提问于
用户回答回答于

处理异步请求中的错误与使用同步请求相同,对于用户体验来说是最好的。

function handleXhrError(xhr) {
    document.open();
    document.write(xhr.responseText);
    document.close();
}

当有<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>")));
}

但当$(xhr.responseText)响应文本代表一个包含头部和身体的整个HTML文档时,不可能做到这一点。当有<body>错误页面模板的一些属性时(例如ID,类等),不要忘记相应地改变子串索引。

用户回答回答于

使用JQuery对话框,如下所示:

function handleXhrError(xhr) {
   ele = $("<div></div>").appendTo("body");
   ele.html(xhr.responseText);
   $(ele).dialog();

}

我会尽可能地抛出并捕获特定的例外情况,并向客户端发送特殊消息。有时我会指示客户端运行一个可能重定向浏览器或部分刷新页面部分的功能。这只取决于具体情况。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励