jquery:如何处理重定向

时间:2017-01-26 21:58:38

标签: ajax redirect

我有以下情况: - 一个带有表单和一些“字段”的简单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');
});

它总是以错误结束。

1 个答案:

答案 0 :(得分:1)

标准的ajax请求默默地遵循重定向,并且无法阻止浏览器执行此操作。

作为ajax的替代方案,正在开发一个新的Fetch API,它允许手动重定向处理。您需要检查当前的浏览器支持是否足以满足您的需求。

fetch API的问题是,由于安全原因(防止数据泄漏),在重定向的情况下,响应对象被过滤并且状态为0.因此,基本上剩下的唯一信息是response.typeopaqueredirect。请参阅spec draft。换句话说,您可以阻止重定向,但无法访问重定向响应中的信息,除非我遗漏了某些内容。

因此,它确定了您的问题的答案 - 目前无法实现完整的手动重定向处理,包括从重定向响应中读取重定向URL。