如何获取jQuery/AJAX的最终URL

3
当我在jQuery中运行$.get.load时,请求似乎完美地遵循302重定向并给出最终响应,我可以在$.get的回调中使用它,或者将其插入this元素中的.load。虽然我显然拥有原始URL,因为我控制输入作为$.get.load第一个参数的字符串(如果我可以直接在回调中获取这个将会很有帮助,简化事情),但是如何在回调中访问最终(重定向后)URL呢?我怀疑它将在XMLHttpRequest对象中,我已经找到了规范

可能的重复问题:https://dev59.com/AnVC5IYBdhLWcg3wvT1a,https://dev59.com/8ErSa4cB1Zd3GeqPW35E - Hello71
1个回答

1
我不确定(并且谷歌搜索也没有帮到我),但这个非正统的解决方案怎么样?
var hiddenIframe = $('').attr({ style: 'display: none;' }).appendTo('body');
hiddenIframe.attr({ src: 'http://www.direct-me.com' });
hiddenIframe.load(function() {
alert(hiddenIframe.attr('src'));
});
基本上它只是创建了一个隐藏的 iframe,然后转到您的 URL,并且 load 的回调 *应该* 告诉您最终的 URL。

看起来你不能。你可以获取原始的 src,但由于安全问题,你不能做更多的事情。


你有什么理由相信这是不可能的吗?毕竟,我知道你可以通过http://www.w3.org/TR/XMLHttpRequest/#the-getallresponseheaders-method获取响应头,所以似乎浏览器并没有阻止你访问该信息。此外,跨站点安全性会防止你向http://facebook.com/delete-my-profile发出AJAX请求,但我不明白为什么它会在这里起作用。 - Steven
@Steven 我还没有被说服,希望有人能证明我错了。 - alex
我正在使用Rails,它使用redirect_to方法停止脚本执行并传递位置标头。我重新定义了该函数,以在XHR情况下或设置了xhr=1隐藏变量时发送包含URL或URL段的文本字符串(例如,表单插件实际上并不使用XHR请求),并在客户端解析返回的内容,如果解析为URL,则进行重定向。从语义上讲,最好只是自定义一个标题并将重定向URL发送到那里,但这种当前方法没有产生复杂性,并且我认为具有更好的兼容性。 - Steven

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接