我正在使用$.post()
Ajax调用servlet,然后使用生成的HTML片段替换div
用户当前页面中的元素.但是,如果会话超时,服务器会发送重定向指令以将用户发送到登录页面.在这种情况下,jQuery正在用div
登录页面的内容替换元素,迫使用户的目光确实见证了罕见的场景.
如何使用jQuery 1.2.6从Ajax调用管理重定向指令?
我使用jQuery向我的服务器发出一个AJAX POST请求,该请求可以返回状态为302的HTTP响应.然后,JavaScript只是向此URL发送GET请求,而我想在此响应中将用户重定向到URL.这可能吗?
我的Web应用程序由许多服务器端的Ajax调用组成RESTful APIs
.每次客户登录我的站点时,登录页面JWT
将从服务器获得(JSON Web令牌)令牌并将其存储为cookie
客户端.(我选择将其存储为cookie,因为这是让浏览器自动发送它的唯一方法,据说它比HTML5 Web存储更安全).令牌中有一个字段描述令牌的到期日期.对于每个Ajax调用,将发送令牌以进行身份验证.
如果客户端长时间停留在我的页面上,则令牌可能会过期.当客户端发出下一个HTTP请求(而不仅仅是REST调用)时,服务器将检测到它.我使用a servlet filter
来拦截all
HTTP请求并检查令牌是否过期.如果令牌过期,将发送重定向到登录页面的响应.
但是上面的方法存在一个问题:"如何在客户端优雅地处理重定向到登录页面的响应?"
对于non-Ajax
发起的HTTP请求,我可以依靠浏览器来处理重定向到登录页面的响应并自动跳转页面.
对于Ajax
发起的HTTP请求,似乎我需要向each
ajax调用添加额外的逻辑completion handler
来检测重定向到登录页面的响应imperatively
并使页面跳转.
还是我完全错了?
一些参考:
添加1:
浏览器似乎会透明地处理302重定向.所以也许我可以只返回302重定向到登录页面,无论是ajax调用还是普通页面访问.我会尽力回复.
从这里:
如果响应是HTTP重定向(状态代码301,302,303或307),则必须透明地遵循(除非它违反安全性或无限循环预防措施).任何其他错误(包括401)必须使对象使用该错误页面作为响应.