問題描述
我知道你不能在使用 XMLHttpRequest 時(shí)攔截或阻止重定向,因?yàn)闉g覽器會(huì)透明地跟隨它,但是有可能
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.確定請(qǐng)求是否被重定向,或者
A. Determine whether a request redirected, or
B.確定它重定向到的哪里?(假設(shè)響應(yīng)沒有給出任何提示)
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 將首先顯示一個(gè) POST 到 url,然后一個(gè) 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**) 的狀態(tài)碼(如果通過 ajax 請(qǐng)求)并在客戶端處理重定向:
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) 不要重定向:
我在重定向模式"中使用它=在發(fā)布請(qǐng)求后重定向(您不想讓用戶刷新發(fā)布請(qǐng)求等)
I use that in "redirect pattern" = redirecting after post request (you don't want to allow user to refresh the post request, etc..)
對(duì)于 ajax 請(qǐng)求,這不是必需的,所以當(dāng)發(fā)布請(qǐng)求是 ajax 時(shí),我會(huì)改為轉(zhuǎn)發(fā)(只是轉(zhuǎn)發(fā)到不同的控制器 - 取決于您的服務(wù)器端框架,或者您正在使用什么......).POST 請(qǐng)求不會(huì)被瀏覽器緩存.
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.
實(shí)際上,我不知道你需要它的原因是什么,所以這對(duì)你來說可能不是那么有用.這在服務(wù)器返回的 ajax 請(qǐng)求與普通請(qǐng)求不同的響應(yīng)時(shí)很有幫助,因?yàn)楫?dāng)瀏覽器重定向 ajax 請(qǐng)求時(shí),重定向的請(qǐng)求不是 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...
[更新]
您可以像這樣訪問(重定向請(qǐng)求的)標(biāo)頭:
You can access headers (of redirected request) like that:
$.post('redirected', {}, function(r, s, req) {
req.getAllResponseHeaders();
req.getResponseHeader('Location');
});
應(yīng)該有'Location'標(biāo)頭,但這取決于服務(wù)器,哪些標(biāo)頭被發(fā)回......
There should be 'Location' header, but it depends on the server, which headers are sent back...
這篇關(guān)于捕獲 javascript XMLHttpRequest 的重定向位置的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!