找出Jquery ajax请求被重定向到的位置

所以 – 我有这个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’。 我想要做的就是找出第二个url是什么(以编程方式 – 每次都会有所不同,所以只需检查萤火虫对我没有帮助)。 我已经尝试了回到“完整”回调的响应标头,但这只是给了我第二次请求回来的内容。

约束: – 我无法控制正在运行的服务器 – 只有js。 – 如果必须,可以切换框架(dojo?prototype?)

理想情况下,我会对/ makeThing执行某种仅限标头的请求,以通过获取初始302响应的标头来找出重定向URL的内容。

如果失败了(因为jquery自动跟随重定向并且似乎没有办法介入请求之间),我会检索最终响应并使用它以某种方式获取来自…的URL? 可能是请求对象?

TLDR:发送ajax请求。 框架自动跟随生成的302重定向。 我如何确定它重定向到的位置?

编辑,澄清:最后的url每次都会有所不同 – 调用’makeThing’会导致服务器创建以后在’getThing / abc123’中托管的内容

如果可能,让您的服务器在这些页面上设置标题(目标页面,而不是重定向页面),例如设置"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对象内部处理的(您无法访问的事件),因此您没有太多选择。

您可以检查规范 ,这是XmlHttpRequest的预期行为:

如果Location头传送的URL的来源与XMLHttpRequest源相同,并且重定向不违反无限循环预防措施,则在观察同源请求事件规则时透明地遵循重定向。

这可能对您的特定情况没有帮助,但是当我遇到同样的问题时,我注意到重定向在HTML中有线索后我最终得到的页面:

  

有些页面中有用于添加Facebook评论的脚本片段,这些片段有时也包含当前的URL。 或者甚至像这样公然:

  

为什么不直接将url“ http://example.com/makeThing ”插入浏览器并查看最终结果?

如果你启动firebug,然后打开控制台,你可以按照请求实际进行的地方。 当您看到AJAX请求已完成处理时,展开该控制台项,您将看到所涉及的请求和任何响应标头。

这真的太糟糕了,我们无法抓住那个标题……但正如Magnus指出的那样,你可以尝试从该页面中读取一些独特的内容,这样可以让你确定哪个页面实际路由到你…