jQuery的AJAX看到重定向为状态200不302?

我使用jQuery和jQuery.form插件来提交我的表单(也使用ASP.Net MVC)。

问题是用户在使用表单身份验证的站点部分中,并且如果他们的auth cookie在他们在页面上的时间到期而不是取回302的状态(这将重定向到登录页面),我仍然获得200 ?

在FireBug中,我看到302 Found,然后我的登录页面作为200发送给我的Ajax调用。 如果我从未将302发送回jQuery表单插件,我如何检测到它们已被注销?


我非常喜欢这个解决方案。 通过将ajax请求上的302响应更改为401,它允许您在客户端设置您的ajax,以监控寻找401的任何ajax请求,以及是否找到一个重定向到登录页面的ajax请求。 非常简单而有效。

Global.asax中:

protected void Application_EndRequest()
{
    if (Context.Response.StatusCode == 302 &&
        Context.Request.Headers["X-Requested-With"] == "XMLHttpRequest")
    {
        Context.Response.Clear();
        Context.Response.StatusCode = 401;
    }
}

客户端代码:

 $(function () {
      $.ajaxSetup({
        statusCode: {
          401: function () {
            location.href = '/Logon.aspx?ReturnUrl=' + location.pathname;
          }
        }
      });
    });

尝试使用缓存:jquery ajax中的false缓存选项:

$.ajax({
  url: "test.html",
  cache: false,
  success: function(html){
    $("#results").append(html);
  }
});

---编辑用C#代码尝试一下:

protected void Page_Load(object sender, System.EventArgs e)
{
   Response.Cache.SetCacheability(HttpCacheability.NoCache);
   ...
}

之前遇到类似的问题。 这个问题给出的解决方案有帮助吗?

链接地址: http://www.djcxy.com/p/71881.html

上一篇: jQuery AJAX see redirect as status 200 not 302?

下一篇: Animate Android Ring Shape's sweep angle