如何防止jQuery ajax在帖子后重定向?

时间:2012-04-04 15:01:30

标签: jquery http redirect

我有一个调度Ajax POST来执行操作的链接。如果用户尚未登录,则action方法返回302重定向到登录页面。如果发生这种情况,我想捕获重定向,以便我可以在灯箱中显示登录表单。

然而,似乎jQuery遵循重定向而不返回控制或调用回调函数。在下面的代码中,从不调用302重定向的警报,并且在调用dataFiler函数时,数据是登录页面的内容。

如何看到该页面已发送302重定向,并分支到其他操作?

 $.ajax(url,
        {
            data: postArguments,
            type : "POST",
            success: function (data) { alert(' success function'); },
            statusCode:
            {
                302: function () { alert(' received redirect 302'); },
                301: function () { alert(' received redirect 301'); }
            },
            dataFilter: function (data, type) { alert('got data ' + data); return data; }
        });

1 个答案:

答案 0 :(得分:12)

这不是jQuery的限制,而是JavaScript本身;没有办法在JavaScript中检测AJAX请求中的重定向;浏览器XHR对象自动神奇地按照the spec无形地遵循重定向。

理想的选择是在服务器代码中添加一个catch到detect an AJAX request(“HTTP_X_REQUESTED_WITH”标头),并返回一个特殊的响应来检测JavaScript中的匿名用户,并进行适当的处​​理。