所以 - 我有这个ajax请求,请参阅 - 。大约6英尺高的金发女郎看起来像这样:
$.ajax({
url: 'http://example.com/makeThing',
dataType: 'html',
type: 'POST',
data: {
something:someotherthing
},
complete: function(request, status) {
console.log("headers=" + request.getAllResponseHeaders(););
}
});
对'/ makeThing'的请求会返回302重定向到第二个url:'getThing / abc123'。我想要做的就是找出第二个网址是什么(以编程方式 - 它每次都会有所不同,所以只需查看firebug对我没有帮助)。我已经尝试了回到'完整'回调的响应标题,但这只是给了我第二次请求时返回的内容。
约束: - 我无法控制正在运行的服务器 - 只有js。 - 如果我必须(dojo?prototype?)
,可以切换框架理想情况下,我会对/ makeThing执行某种仅限标头的请求,以通过获取初始302响应的标头来找出重定向网址。
如果失败了(因为jquery自动跟随重定向并且似乎没有办法介入请求之间),我会检索最终响应并使用它以某种方式从...获取URL?请求对象,也许?
TLDR:发送ajax请求。框架自动跟随生成的302重定向。我如何确定它重定向到哪里?
编辑,澄清: 最后的网址每次都会有所不同 - 调用'makeThing'会导致服务器创建以后在'getThing / abc123'中托管的内容
答案 0 :(得分:4)
如果可能,请让您的服务器在这些页面上设置标题(目标页面,而不是重定向页面),例如设置"current-location"
标题,然后您可以执行此操作:
$.ajax({
url: 'http://example.com/makeThing',
dataType: 'html',
type: 'POST',
data: {
something:someotherthing
},
complete: function(request, status) {
var location = request.getResponseHeader("current-location");
}
});
是的,这个 有点hacky,但由于重定向是在XmlHttpRequest对象内部处理的(您无法访问的事件),因此您没有太多选择。< / p>
You can check the spec,这是XmlHttpRequest的预期行为:
如果Location头传送的URL的来源与XMLHttpRequest源相同,并且重定向不违反无限循环预防措施,则在观察同源请求事件规则时透明地遵循重定向。
答案 1 :(得分:2)
这可能对您的特定情况没有帮助,但是当我遇到同样的问题时,我注意到重定向在HTML中有线索之后我最终得到的页面:
<meta property="og:url" content="THE_URL_OF_THE_PAGE" />
有些网页上有用于添加Facebook评论的脚本代码段,有时这些代码段也包含当前的网址。或者甚至像这样公然:
<a href="http://www.facebook.com/sharer.php?u=THE_URL_OF_THE_PAGE">
答案 2 :(得分:0)
为什么不将网址“http://example.com/makeThing”插入浏览器并查看最终结果?
答案 3 :(得分:0)
如果您启动了firebug,然后打开控制台,您可以按照请求的实际位置进行操作。当您看到AJAX请求已完成处理时,展开该控制台项,您将看到所涉及的请求和任何响应标头。
答案 4 :(得分:0)
真的太糟糕了,我们无法抓住那个标题......但正如Magnus指出的那样,您可以尝试从该页面读取一些独特的内容,这样您就可以确定哪个页面实际路由到了您。