我有以下情况: - 一个带有表单和一些“字段”的简单html页面 - 提交表单时,执行GET到指定的URL回复“302”,用户必须重定向的URL也在“Location”头中 - 我用小提琴手检查过,而且看起来很正常
简单的html页面包含以下代码:
function doSubmit() {
var _url = $("#url").val();
$.ajax({
url: _url,
complete: function(xmlHttp) {
// xmlHttp is a XMLHttpRquest object
alert(xmlHttp.status);
}
问题是,在提交请求时,我收到状态码:0,我无法检索任何“位置”标题。
更新
我尝试使用Fetch API,但它似乎不起作用:
var req = new Request(url, {
method: 'get',
redirect: 'manual',
"Cache-Control": "no-cache"
});
fetch(req).then(function (res) {
alert(res.status);
}, function (e) {
alert('error');
});
它总是以错误结束。
答案 0 :(得分:1)
标准的ajax请求默默地遵循重定向,并且无法阻止浏览器执行此操作。
作为ajax的替代方案,正在开发一个新的Fetch API,它允许手动重定向处理。您需要检查当前的浏览器支持是否足以满足您的需求。
fetch API的问题是,由于安全原因(防止数据泄漏),在重定向的情况下,响应对象被过滤并且状态为0.因此,基本上剩下的唯一信息是response.type
值opaqueredirect
。请参阅spec draft。换句话说,您可以阻止重定向,但无法访问重定向响应中的信息,除非我遗漏了某些内容。
因此,它确定了您的问题的答案 - 目前无法实现完整的手动重定向处理,包括从重定向响应中读取重定向URL。