我知道在使用XMLHttpRequest时,你不能拦截重定向或阻止重定向,因为浏览器会透明地跟随它,但它是否可能
一个。确定重定向的请求,或
B中。确定重定向到哪里? (假设响应没有提示)
示例代码:
$.post("/my-url-that-redirects/", {},
function(response, statusCode, xmlHttpRequest){
//Somehow grab the location it redirected to
}
);
在我的情况下,firebug将首先向网址显示POST,然后向重定向的网址显示GET。可以捕获GET位置吗?
答案 0 :(得分:3)
1)使用不同于301(2 **)的状态代码(如果是ajax请求)并在客户端处理重定向:
var STATUS = {
REDIRECT: 280
};
$.post('/redirected', {}, function(response, status, request) {
if (status == STATUS.REDIRECT) {
// you need to return the redirect url
location.href = response.redirectUrl;
} else {
$('#content').html(request.responseText);
}
});
2)不要重定向:
我在“重定向模式”中使用它=在发布请求后重定向(您不希望允许用户刷新发布请求等)。
使用ajax请求,这不是必需的,所以当post请求是ajax时,我会转发(只转发到不同的控制器 - 取决于你的服务器端框架,或者你正在使用的......)。浏览器不会缓存POST请求。
实际上,我不知道你需要什么原因,所以这对你来说可能没那么有用。当服务器为ajax请求返回不同于常见请求的响应时,这很有用,因为当浏览器重定向ajax请求时,重定向的请求不是XMLHttpRequest ...
[更新]
您可以访问(重定向请求)标题:
$.post('redirected', {}, function(r, s, req) {
req.getAllResponseHeaders();
req.getResponseHeader('Location');
});
应该有“位置”标题,但这取决于服务器,哪些标题会被发回...
答案 1 :(得分:2)
4年后,现在可以在Chrome 42+(Opera 29+)和Firefox 39+中使用来自XHR实例的responseURL找到最后一个重定向位置,但它在IE,Edge或野生动物园。