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位置吗?
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”标头,但这取决于服务器,发回哪些标头......