Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
捕获javascript XMLHttpRequest的重定向位置_Javascript_Jquery_Xmlhttprequest - Fatal编程技术网

捕获javascript XMLHttpRequest的重定向位置

捕获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

我知道,在使用XMLHttpRequest时,您不能截获或阻止重定向,因为浏览器会透明地跟踪它,但是否可以这样做

A.确定请求是否重定向,或

B.确定它重定向到的位置?(假设响应没有给出任何提示)

示例代码:

$.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的情况下才可能是这样。