我正在向接受跨域请求的服务器执行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链接头的内容?
解决方法:
我对你的问题很感兴趣,但是要寻找解决方案.不幸的是,没有一个直接的.根据我到目前为止所读的所有帖子(How to manage a redirect request after a jQuery Ajax call和许多类似的帖子),你不能简单地捕获301重定向,因为浏览器通常会获取内容并将端点提供给用户,这就是为什么你得到200状态代码而不是302.作为一种解决方法,人们建议使用自定义标头.当您在执行ajax请求后收到标头时,您可以进行自己的操作,即保存链接标头,然后再发出第二个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或其他类似语言创建代理脚本/服务,这样可以在不遵循重定向的情况下获取请求,并且仅将链接和位置打印为JSON或XML.之后你的javascript将解析响应并进入someothersite.com
但有趣的是,官方的jQuery ajax documentation页面暗示支持3xx重定向(靠近statusCode的文档),但这似乎不起作用.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。