3

我有一个在休息调用中传递给我的 uri,它是一个重定向 url,我希望能够拦截调用以在标头中获取重定向“位置”。

以下代码为位置标头返回 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);
        }
    });
}); 
4

2 回答 2

0

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

complete: function (request, status) {
window.location.href=request;
}
于 2012-08-10T22:35:00.417 回答
0

使用这个小提琴。我稍微更新了您的代码,添加了一些用于调试的控制台输出,因为我目前总是得到错误:NETWORK_ERR: XMLHttpRequest Exception 101

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

我还添加了一个success: function...带有简单调试的回调,以确保它在进入时被捕获。

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

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

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

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

于 2012-08-10T23:10:29.537 回答