捕获javascript XMLHttpRequest的重定向位置
我知道,在使用XMLHttpRequest时,您不能截获或阻止重定向,因为浏览器会透明地跟踪它,但是否可以这样做 A.确定请求是否重定向,或 B.确定它重定向到的位置?(假设响应没有给出任何提示) 示例代码:捕获javascript XMLHttpRequest的重定向位置,javascript,jquery,xmlhttprequest,Javascript,Jquery,Xmlhttprequest,我知道,在使用XMLHttpRequest时,您不能截获或阻止重定向,因为浏览器会透明地跟踪它,但是否可以这样做 A.确定请求是否重定向,或 B.确定它重定向到的位置?(假设响应没有给出任何提示) 示例代码: $.post("/my-url-that-redirects/", {}, function(response, statusCode, xmlHttpRequest){ //Somehow grab the location it redirected to
$.post("/my-url-that-redirects/", {},
function(response, statusCode, xmlHttpRequest){
//Somehow grab the location it redirected to
}
);
在我的例子中,firebug将首先显示到url的帖子,然后显示到重定向url的GET。获取位置可以被捕获吗?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) 不重定向:
我在“重定向模式”=post请求后重定向(您不希望允许用户刷新post请求,等等)中使用它
对于ajax请求,这是不必要的,所以当post请求是ajax时,我会改为转发(只是转发到不同的控制器-取决于您的服务器端框架,或者您正在使用什么…)。浏览器不会缓存POST请求
事实上,我不知道你需要它的原因是什么,所以这可能对你没什么用处。当服务器返回与普通请求不同的ajax请求响应时,这很有用,因为当浏览器重定向ajax请求时,重定向的请求不是XMLHttpRequest
[更新]
您可以访问(重定向请求的)标题,如下所示:
$.post('redirected', {}, function(r, s, req) {
req.getAllResponseHeaders();
req.getResponseHeader('Location');
});
应该有“位置”标题,但这取决于服务器,哪些标题会被发回…4年后,现在可以在Chrome 42+(Opera 29+)和Firefox 39+中使用XHR实例中的responseURL找到最后一个重定向位置,但在IE、Edge或safari中尚不可用 您只得到响应头中的内容。xmlHttpRequest.getAllResponseHeaders()似乎没有给出它的URL的任何指示。是否有人在客户端找到了任何解决方法?如果没有对web服务器的控制,如何捕获重定向url。不幸的是,这篇文章模拟的是填写的表单,而不是ajax api,因此我无法控制从它发回的状态代码,也无法控制它是否重定向。抱歉,我不确定是否理解您的评论。您的意思是,服务器端不是由您自己管理的吗?所以,您不能更改服务器端?我认为只有在正确设置CORS的情况下才可能是这样。