如何在jQuery Ajax调用之后管理重定向请求我正在使用$.post()Ajax调用servlet,然后使用生成的HTML片段替换div用户当前页面中的元素。但是,如果会话超时,服务器会发送重定向指令以将用户发送到登录页面。在这种情况下,jQuery正在用div登录页面的内容替换元素,迫使用户的目光确实见证了罕见的场景。如何使用jQuery 1.2.6从Ajax调用管理重定向指令?
4 回答
qq_花开花谢_0
TA贡献1835条经验 获得超7个赞
我解决了这个问题:
向响应添加自定义标头:
public ActionResult Index(){ if (!HttpContext.User.Identity.IsAuthenticated) { HttpContext.Response.AddHeader("REQUIRES_AUTH","1"); } return View();}
将JavaScript函数绑定到
ajaxSuccess
事件并检查标头是否存在:$(document).ajaxSuccess(function(event, request, settings) { if (request.getResponseHeader('REQUIRES_AUTH') === '1') { window.location = '/'; }});
富国沪深
TA贡献1790条经验 获得超9个赞
最终实现的解决方案是使用包装器来执行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。此外,我们只需要重定向到登录页面。
添加回答
举报
0/150
提交
取消