我有一个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);
}
});
});
答案 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。这允许,例如,服务器端 重定向到另一个域。
我不确定重定向是否被视为跨域,但我猜测上述的组合是导致错误和空请求标头的原因。