确定jQuery .ajax()将一串重定向解析为

我知道重定向会自动跟踪,而且我很少/无法控制该过程。 这很好,但我仍然对我的请求最终结束的地方非常感兴趣。 是否有可能看到我的请求最终到底是什么url?

我不想依赖返回的HTML本身告诉我我在哪里。

示例代码:

var originalURL = '/this/will/be/redirected'; $.ajax({ url: originalURL, dataType: "html", success: function(data, statusText, jqXHR) { var endPointURL = insertMagicHere(); alert("Our query to " + original + " ended up at " + endPointURL + "!"); } }); 

我在jqXHR中寻找它,但到目前为止没有运气。 (虽然,我对这一切都很陌生,可能就在我的鼻子底下)

据我所知(并且有测试),它唯一可能检测到IF是否存在重定向以及有多少重定向(但不是TO在哪里)。

你可以看看我的代码:

 var xhr = $.ajax({ url: originalURL, dataType: "html", success: function(data, statusText, jqXHR) { console.log(data); console.log(statusText); console.log(jqXHR.getAllResponseHeaders()); } }); 

我的开发机器上的jqXHR.getAllResponseHeaders()输出是这样的:

 Date: Fri, 05 Aug 2011 01:29:20 GMT Server: ... X-Powered-By: ... Content-Length: 5 Keep-Alive: timeout=15, max=98 Connection: Keep-Alive Content-Type: text/html 

Keep-Alive: timeout=15, max=98值得深入了解。 max=99时没有重定向结果,而ONE重定向导致max=98

XMLHttpRequest.responseXML是一个文档,意味着它具有baseURI属性,该属性将是从中下载数据的位置。 主要问题是只有在获得XML文档时才会设置responseXML 。 在使用overrideMimeType() Firefox中,尽管在文档中报告了语法错误:

 var r = new XMLHttpRequest(); r.open("GET", "http://google.com"); r.overrideMimeType("text/xml"); r.onload = function() { alert(r.responseXML.baseURI); } r.send(null); 

不幸的是,在Chrome中你需要一个真正的XML文档, overrideMimeType()没有帮助。 并且MSIE甚至没有实现这种方法(鉴于确定文档源似乎不可能,这不是一个大问题)。

我不确定他们使用服务器端有什么魔力,但是www.longURL.com会做你正在谈论的事情。

他们的代码向他们的服务器发送请求:

他们有一个jquery插件: http : //plugins.jquery.com/project/longurl

我不确定如何从中获取中间步骤,但他们的网站包含重定向,因此他们必须找到一些方法来做到这一点,这意味着他们可能有一些方法来实现它。

要使用它,你必须查看他们的jquery插件,以找出他们请求实际数据的位置。

编辑

请允许我纠正这个非常不合适的答案:

http://www.longURL.com提供的服务可以扩展缩短的url。

他们的主要网站(在扩展URL时)跟踪每个重定向,直到您到达最终目的地。

如果你做了他们正在做的事情,你也许可以做同样的事情。

不幸的是,我不知道他们在做什么(除了将他们的请求发送到可能专门监听303s的服务器)。

他们的jQuery插件可能有用也可能没用。 如果它暴露了重定向并且您可以弄清楚如何对系统进行jimmyassembly,您可以通过他们的服务获得它,否则您可以创建一个缩短的链接到初始链接并通过他们的服务得到结果…听起来痛苦,但如果你不能/不愿意做服务器的东西,那么这可能是你最好的选择。