要点:你如何处理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显示一些警报/消息框以通知用户有关不可解析的错误,但是用户可以将其关闭并继续使用该页面,而这是不可能的.
我正在尝试实现一种身份验证机制,其中每个浏览器选项卡可能以不同的用户身份登录.
以下是此系统的规则:
到目前为止我尝试过的:
使用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>块永远不会执行.
有任何想法吗?