捕获javascript XMLHttpRequest的重定向位置

Sne*_*nea 17 javascript jquery xmlhttprequest

我知道在使用XMLHttpRequest时,你不能拦截重定向或阻止重定向,因为浏览器会透明地跟随它,但它是否可能

A.确定重定向的请求,或

B.确定在那里它重定向到?(假设响应没有给出提示)

示例代码:

$.post("/my-url-that-redirects/", {}, 
    function(response, statusCode, xmlHttpRequest){
        //Somehow grab the location it redirected to
    }
);
Run Code Online (Sandbox Code Playgroud)

在我的情况下,firebug将首先显示对URL的POST,然后对重定向的URL进行GET.可以捕获GET位置吗?

Voj*_*jta 4

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);
  }
});
Run Code Online (Sandbox Code Playgroud)

2) 不要重定向:

我在“重定向模式”=发布请求后重定向(您不想允许用户刷新发布请求等)中使用它

对于ajax请求,这是没有必要的,所以当post请求是ajax时,我会转发(只是转发到不同的控制器 - 取决于您的服务器端框架,或者您正在使用的......)。POST 请求不会被浏览器缓存。

事实上,我不知道你需要它的原因是什么,所以这对你来说可能没那么有用。当服务器返回的 ajax 请求响应与普通请求不同时,这很有用,因为当浏览器重定向 ajax 请求时,重定向的请求不是 XMLHttpRequest...

[更新]

您可以像这样访问(重定向请求的)标头:

$.post('redirected', {}, function(r, s, req) {
  req.getAllResponseHeaders();
  req.getResponseHeader('Location');
});
Run Code Online (Sandbox Code Playgroud)

应该有“Location”标头,但这取决于服务器,发回哪些标头......