gpt4 book ai didi

javascript - 捕获 javascript XMLHttpRequest 的重定向位置

转载 作者:可可西里 更新时间:2023-11-01 01:19:32 26 4
gpt4 key购买 nike

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

一个。判断一个请求是否被重定向,或者

B.确定它被重定向到哪里? (假设响应没有给出任何提示)

示例代码:

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

在我的例子中,firebug 将首先显示一个 POST 到 url,然后是一个 GET 到重定向的 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) 不要重定向:

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

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

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

[更新]

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

$.post('redirected', {}, function(r, s, req) {
req.getAllResponseHeaders();
req.getResponseHeader('Location');
});

应该有 'Location' header ,但这取决于服务器,哪些 header 被发回...

关于javascript - 捕获 javascript XMLHttpRequest 的重定向位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4465547/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com