我正在向接受跨域请求的服务器执行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链接头的内容?
答案 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 } Location
或JSON
。然后,您的javascript将解析响应并继续XML
我感兴趣的是,官方jQuery ajax documentation页面意味着支持someothersite.com
重定向(靠近3xx
的文档但是没有'似乎工作。