問題描述
我知道你不能在使用 XMLHttpRequest 時攔截或阻止重定向,因為瀏覽器會透明地跟隨它,但是有可能
I know that you can't, when using an XMLHttpRequest, intercept a redirect or prevent it, as the browser will transparently follow it, but is it possible to either
A.確定請求是否被重定向,或者
A. Determine whether a request redirected, or
B.確定它重定向到的哪里?(假設響應沒有給出任何提示)
B. Determine where it redirected to? (assuming that the response gives no hints)
示例代碼:
$.post("/my-url-that-redirects/", {},
function(response, statusCode, xmlHttpRequest){
//Somehow grab the location it redirected to
}
);
在我的例子中,firebug 將首先顯示一個 POST 到 url,然后一個 GET 到重定向的 url.可以捕獲該 GET 位置嗎?
In my case, firebug will first show a POST to the url, then a GET to the redirected url. Can that GET location be captured?
推薦答案
1) 使用不同于 301 (2**) 的狀態碼(如果通過 ajax 請求)并在客戶端處理重定向:
1) Use different status code than 301 (2**) (if request by ajax) and handle redirection on client side:
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) 不要重定向:
我在重定向模式"中使用它=在發布請求后重定向(您不想讓用戶刷新發布請求等)
I use that in "redirect pattern" = redirecting after post request (you don't want to allow user to refresh the post request, etc..)
對于 ajax 請求,這不是必需的,所以當發布請求是 ajax 時,我會改為轉發(只是轉發到不同的控制器 - 取決于您的服務器端框架,或者您正在使用什么......).POST 請求不會被瀏覽器緩存.
With ajax request, this is not necessary, so when the post request is ajax, I do forward instead (just forward to different controller - depends on your server-side framework, or what you are using...). POST requests are not cached by browsers.
實際上,我不知道你需要它的原因是什么,所以這對你來說可能不是那么有用.這在服務器返回的 ajax 請求與普通請求不同的響應時很有幫助,因為當瀏覽器重定向 ajax 請求時,重定向的請求不是 XMLHttpRequest...
Actually, I don't know what's the reason you need that, so this might not be so useful for you. This is helpful when server returns different responses for ajax requests than common requests, because when browser redirect ajax request, the redirected request is not XMLHttpRequest...
[更新]
您可以像這樣訪問(重定向請求的)標頭:
You can access headers (of redirected request) like that:
$.post('redirected', {}, function(r, s, req) {
req.getAllResponseHeaders();
req.getResponseHeader('Location');
});
應該有'Location'標頭,但這取決于服務器,哪些標頭被發回......
There should be 'Location' header, but it depends on the server, which headers are sent back...
這篇關于捕獲 javascript XMLHttpRequest 的重定向位置的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!