相关疑难解决方法(0)

处理服务器端HTTP 4nn/5nn错误在jQuery的ajax请求中返回整个HTML文档

要点:你如何处理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显示一些警报/消息框以通知用户有关不可解析的错误,但是用户可以将其关闭并继续使用该页面,而这是不可能的.

error-handling jquery jsp servlets

19
推荐指数
1
解决办法
4008
查看次数

将特定于选项卡的数据绑定到HTTP GET请求

我正在尝试实现一种身份验证机制,其中每个浏览器选项卡可能以不同的用户身份登录.

以下是此系统的规则:

  • 身份验证令牌指示登录的用户.
  • 有两种身份验证令牌:私有和公共.
  • 每个私有令牌都绑定到一个选项卡并确定其帐户信息.
  • 可以通过任何选项卡读取/写入公共令牌,并指示登录的最后一个帐户(跨所有选项卡).
  • 当用户在任何选项卡中注销时,将删除私有和公共令牌.
  • 每次选项卡访问需要身份验证的页面时,系统都会尝试读取私有令牌.如果未设置(如新/空白选项卡的情况),则会尝试将公共令牌的值复制到私有令牌中.如果未设置公共令牌,则将用户重定向到验证屏幕.
  • 当选项卡已登录且用户单击链接时,该请求必须在自定义HTTP标头中包含私有标记.出于安全原因,不能在URI中发送此信息.
  • 能够使用后退/前进按钮进行导航,就像使用普通链接一样(意味着,没有提示重新提交表单数据).

到目前为止我尝试过的:

  • 使用cookies了私有和公共令牌:这不起作用,因为服务器无法知道看哪个饼干中如果用户点击从选项卡内的链接的方式,要求将所有的标签和所有的cookies服务器无法知道哪一个点击链接.

  • 存储私有令牌sessionStorage:这不起作用,因为当用户点击链接时,无法指定应与HTTP GET请求一起发送的自定义标头.

  • 使用AJAX请求页面,然后使用数据URI导航到内存中的页面:出于安全原因,Internet Explorer不允许对HTML内容使用DATA URI.请参阅http://msdn.microsoft.com/en-us/library/cc848897%28v=vs.85%29.aspx

  • 使用<form method="get" enctype="multipart/form-data">隐藏字段使用和传递令牌:enctype ="multipart/form-data"仅支持POST.

  • 使用<form method="post" enctype="multipart/form-data">隐藏字段并使用隐藏字段传递令牌:理论上,这应该可行但现在如果用户使用后退/前进按钮,则会提示用户重新提交表单数据.

  • 使用AJAX请求页面,然后使用重写当前页面document.open(); document.write(); document.close().我想这两个/sf/answers/308326161/http://forums.mozillazine.org/viewtopic.php?p=5767285&sid=d6a5a2e8e311598cdbad124e277e0f52#p5767285并在这两种情况下,在新的脚本<head>块永远不会执行.

有任何想法吗?

html cookies ajax rest http

12
推荐指数
1
解决办法
3870
查看次数

标签 统计

ajax ×1

cookies ×1

error-handling ×1

html ×1

http ×1

jquery ×1

jsp ×1

rest ×1

servlets ×1