使用Ajax从HTTP 300代码响应中提取HTTP标头

时间:2014-09-22 20:32:40

标签: javascript jquery ajax http

我正在向接受跨域请求的服务器执行Ajax请求,但我无法控制服务器代码。我的愿望是从响应中提取HTTP链接头。举个例子:

$.ajax({
 url: theURL
}).done(function(data,textStatus,xhr){});

点击服务器响应以下内容(当使用curl查询URL时可观察到):

HTTP/1.1 302 Found
Link: <http://thedataIwant.com>;rel="foo"
Location: http://someothersite.com

浏览器遵循HTTP 3XX代码,我从done()处理程序中的http://someothersite.com获取HTTP标头的内容;但是,我想首先使用3XX代码提取初始HTTP响应的链接头的内容。

如何从具有3XX状态代码的HTTP响应中提取HTTP链接头的内容?

1 个答案:

答案 0 :(得分:3)

我对你的问题很感兴趣,但我仍在寻找解决方案。不幸的是,没有一个直接的。根据我到目前为止阅读的所有帖子(How to manage a redirect request after a jQuery Ajax call和许多类似的帖子),你不能简单地捕获301重定向,因为浏览器通常会获取内容并将端点提供给用户,这就是为什么你获取200状态代码而不是302。作为一种解决方法,人们建议使用自定义标头。在执行ajax请求后收到标头时,您可以自己进行操作,即保存Link标头,然后再发出第二个ajax请求以从MyRedirectLocationHeader: http://someothersite.com获取内容。

代码看起来与此类似:

$.ajax({
    url: theURL,
    success: function(response, status, xhr) {
        var link = xhr.getResponseHeader('Link');
        if(link != null) {
            // my second ajax request to the link in the MyRedirectLocationHeader
        }
    }
});

这是一个非常糟糕的黑客攻击,但这是迄今为止我发现的唯一可行的解​​决方法。另一种方法可能是您使用PHP,Java或其他类似语言创建proxy脚本/服务,这样可以在不遵循重定向的情况下获取请求,并且只打印Link和{{1 } LocationJSON。然后,您的javascript将解析响应并继续XML

我感兴趣的是,官方jQuery ajax documentation页面意味着支持someothersite.com重定向(靠近3xx的文档但是没有'似乎工作。

相关问题