我$.post()使用Ajax调用servlet,然后使用生成的HTML片段替换div用户当前页面中的元素。但是,如果会话超时,服务器将发送重定向指令以将用户发送到登录页面。在这种情况下,jQuery用div登录页面的内容替换了该元素,从而迫使用户的眼睛确实看到了一个罕见的场景。
$.post()
div
如何使用jQuery 1.2.6从Ajax调用管理重定向指令?
最终实现的解决方案是对Ajax调用的回调函数使用包装器,并在此包装器中检查返回的HTML块上是否存在特定元素。如果找到该元素,则包装器将执行重定向。如果不是,则包装将调用转发给实际的回调函数。
例如,我们的包装器函数类似于:
function cbWrapper(data, funct){ if($("#myForm", data).length > 0) top.location.href="login.htm";//redirection else funct(data); }
然后,在进行Ajax调用时,我们使用了类似以下内容:
$.post("myAjaxHandler", { param1: foo, param2: bar }, function(data){ cbWrapper(data, myActualCB); }, "html" );
这对我们有用,因为所有Ajax调用总是在DIV元素内返回HTML,该DIV元素用于替换页面的一部分。另外,我们只需要重定向到登录页面。