为了账号安全,请及时绑定邮箱和手机立即绑定

如何在jQuery Ajax调用之后管理重定向请求

如何在jQuery Ajax调用之后管理重定向请求

如何在jQuery Ajax调用之后管理重定向请求我正在使用$.post()Ajax调用servlet,然后使用生成的HTML片段替换div用户当前页面中的元素。但是,如果会话超时,服务器会发送重定向指令以将用户发送到登录页面。在这种情况下,jQuery正在用div登录页面的内容替换元素,迫使用户的目光确实见证了罕见的场景。如何使用jQuery 1.2.6从Ajax调用管理重定向指令?
查看完整描述

4 回答

?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

我解决了这个问题:

  1. 向响应添加自定义标头:

    public ActionResult Index(){
        if (!HttpContext.User.Identity.IsAuthenticated)
        {
            HttpContext.Response.AddHeader("REQUIRES_AUTH","1");
        }
        return View();}
  2. 将JavaScript函数绑定到ajaxSuccess事件并检查标头是否存在:

    $(document).ajaxSuccess(function(event, request, settings) {
        if (request.getResponseHeader('REQUIRES_AUTH') === '1') {
           window.location = '/';
        }});


查看完整回答
反对 回复 2019-05-25
?
子衿沉夜

TA贡献1828条经验 获得超3个赞

没有浏览器正确处理301和302响应。事实上,该标准甚至表示他们应该“透明地”处理它们,这对于Ajax Library供应商来说是一个非常令人头疼的问题。在Ra-Ajax中,我们被迫使用HTTP响应状态代码278(只是一些“未使用的”成功代码)来处理来自服务器的透明重定向...

这真让我烦恼,如果有人在W3C有一些“拉”,我会很高兴你能让W3C 知道我们真的需要自己处理301和302代码......!;)


查看完整回答
反对 回复 2019-05-25
?
富国沪深

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。此外,我们只需要重定向到登录页面。


查看完整回答
反对 回复 2019-05-25
  • 4 回答
  • 0 关注
  • 1803 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信