我知道自动跟踪重定向,并且我很少/无法控制该过程。这很好,但我仍然对我的请求最终结束的地方非常感兴趣。是否有可能看到我的请求最终到底是什么网址?
我不想要依赖返回的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中寻找它,但到目前为止没有运气。 (虽然,我对这一切都不熟悉,可能就在我的鼻子底下)
答案 0 :(得分:4)
据我所知(并且有测试),它唯一可能检测到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
值得深入了解。 {ONE}重定向导致max=99
max=98
没有重定向结果
答案 1 :(得分:1)
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甚至没有实现这种方法(鉴于确定文档源似乎不可能,这不是一个大问题。)
答案 2 :(得分:0)
我不确定他们使用服务器方面有什么魔力,但是www.longURL.com正在做你正在谈论的事情。
他们的代码向他们的服务器发送请求:
他们有一个jquery插件:http://plugins.jquery.com/project/longurl
我不确定如何从中获取中间步骤,但他们的网站包含重定向,因此他们必须找到一些方法来做到这一点,这意味着他们可能有某种方法来实现它。
要使用它,你必须查看他们的jquery插件,以找出他们请求实际数据的位置。
修改强>
请允许我纠正这个非常不合适的答案:
http://www.longURL.com有一项服务可以扩展缩短的网址。
他们的主网站(在扩展网址时)会跟踪每次重定向,直到您到达目的地为止。
如果你做了他们正在做的事情,你也可以这样做。
不幸的是,我不知道他们正在做什么(除了将他们的请求发送到可能专门监听303s的服务器之外)。
他们的jQuery插件可能有用也可能没用。如果它暴露了重定向,你可以弄清楚如何使用系统,你可以通过他们的服务获得它,否则你可以创建一个缩短的链接到初始链接,并通过他们的服务得到结果...听起来痛苦,但如果你不能/不愿意做服务器的话,那么这可能是你最好的选择。