如何在标题中截取并获取重定向URL的位置?

时间:2012-08-10 22:24:04

标签: javascript jquery http redirect

我有一个uri在休息通话中传递给我,这是一个重定向网址,我希望能够拦截通话以获得重定向'位置'在标题中。

以下代码为Location Header返回null。执行此客户端的正确方法是什么?

$(document).ready(function () {
    $.ajax({
        url: 'http://myserver.com/redirect?token=AAAnY13Y-76LZ4zXDOd',  // obviously not cross domain and contains redirect location to a youtube link to embed in my page, http://www.youtube.com/embed/bl2j345-xy
        data: {
            something: 'someotherthing'
        },
        complete: function (request, status) {
            var location = request.getResponseHeader("Location");  // this is null...it shows up in Fiddler as http://www.myotherserver.com in the Location Header
        },
        error: function (request, error) {
            alert(request.responseText);
        }
    });
}); 

2 个答案:

答案 0 :(得分:0)

你为什么不设置 - > http://myserver.com/redirect?token=AAAnY13Y-76LZ4zXDOd返回重定向位置http://www.myotherserver.com 所以:

complete: function (request, status) {
window.location.href=request;
}

答案 1 :(得分:0)

使用此fiddle。我稍微更新了你的代码,为调试添加了一些控制台输出,因为我目前总是收到错误:NETWORK_ERR: XMLHttpRequest Exception 101

我所做的主要更改(我认为可能是您的空标题的原因)是设置async: false。这很重要,因为您不希望请求在完成之前返回。如果未指定,则默认设置为async: true,这会导致ajax调用立即返回,这可能是即使调用成功也不会看到响应头的原因。

我还添加了一个success: function...回调函数,其中包含一个简单的调试,以确保在它进入时会被捕获。

另请查看ajax documentation中有关crossDomain非异步请求和crossDomain设置的部分:

  

<强>异步
  默认值:true
  默认情况下,所有请求都是异步发送的(默认设置为true)。   如果需要同步请求,请将此选项设置为false。   跨域请求和dataType:“jsonp”请求不支持   同步操作。

     

crossDomain(已添加1.5)
  默认值:对于同域请求为false,对于跨域请求为true
  如果您希望在同一个域上强制执行跨域请求(例如JSONP),请设置   crossDomain的值为true。这允许,例如,服务器端   重定向到另一个域。

我不确定重定向是否被视为跨域,但我猜测上述的组合是导致错误和空请求标头的原因。