16

我有一个发送 Ajax POST 以执行操作的链接。如果用户尚未登录,则操作方法会返回 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; }
        });
4

1 回答 1

14

这不是 jQuery 的限制,而是 JavaScript 本身的限制;无法在 JavaScript 中检测 AJAX 请求中的重定向;浏览器 XHR 对象根据规范自动且不可见地遵循重定向。

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

于 2012-04-04T15:04:40.877 回答