javascript - 当对 $.ajax 的响应是 301 时,我可以通过编程方式获取新 URL 吗?

标签 javascript jquery xmlhttprequest jqxhr

当对 xhr 请求的响应是 301 时,有没有办法获取最终重定向到的 URL?

我的网站包含许多来自旧版本的旧版 URL,这些 URL 会向正确的新 URL 返回 301 响应。

出于实用目的,我希望能够向旧 URL 发出请求,并能够检索新 URL,即将请求发送到“/oldpage.aspx?foo=someParam”,取回新 URL “/arbitaryNewPageName/someParam”。

我一直在 firebug 控制台中玩这个:

    $.ajax({
            url: "/oldpage.aspx?foo=someParam", 
            success: function(response, status, jqxhr){
            //poking around, trying to get the new URL, "/arbitraryNewPage/someParam"
                console.log(jqxhr.getAllResponseHeaders());
                console.log(jqxhr);
            },
            beforeSend: function(jqxhr, settings){
                console.log(jqxhr);
                console.log(settings);
            }
        });

我可以在 firebug 中看到,当这段代码运行时,它对“/oldpage.aspx?foo=someParam”执行一个 GET,并获得 301 响应,然后对“/arbitaryNewPageName/someParam”执行另一个 GET。

对于第一个请求,我在响应 header 的 Location 值中看到了重定向的 URL。不幸的是,第二个请求是传递给 $.ajax.success 函数的,它在请求 header 的 Referrer 值中只有重定向的 URL。

是否有办法拦截对第一个响应的响应,或者查看第二个请求的请求 header ?

编辑:感谢大家的回复。我想我需要提供一些背景知识来阐明我到底在寻找什么。

业务用户要求我创建一个列表,将旧 URL 与新 URL 相关联。由于我已经在服务器上实现了一种将遗留 URL 重定向到新 URL 的方法,因此我希望能够完成这项工作并创建一个脚本来向遗留 URL 发出请求并获取请求被重定向到的 URL。像这样:

for (var i = 0; i < arrayOfLegacyUrls.length; i++)
{
    $.ajax({
            url: arrayOfLegacyUrls[i], 
            success: function(response, status, jqxhr){
                var newUrl = "???"; //do magic to get URL that request was redirected to

                writeToFileForBusinessUser(arrayOfLegacyUrls[i], newUrl);
            }
        });
}

我的问题的症结在于:我可以从 XHR 获取我的请求被重定向到的 URL 吗?到目前为止,答案似乎是“否”。

最佳答案

我找到了一种方法,通过使用实际的 XHR 对象而不是 jquery 的 ajax 方法从这个答案中做到这一点:https://stackoverflow.com/a/7015798/194099

var r = new XMLHttpRequest();
r.open("GET", "http://mysite.com/legacyUrl.aspx?bla=bla");
r.overrideMimeType("text/xml");
r.onload = function()
{
  alert(r.responseXML.baseURI); //gets the URL the request was redirected to! huzzah!
}
r.send(null);

有了这个,我能够向一个我知道会返回 301 的 URL 发出请求,并获取请求被重定向到的 URL。

关于javascript - 当对 $.ajax 的响应是 301 时,我可以通过编程方式获取新 URL 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10391410/

相关文章:

javascript - 403-禁止 PHP 中的文件处理某些请求

javascript - 如何从 iframe 中获取 iframe 的 X 和 Y 位置?

jquery fullcalendar 完整翻译

php - Javascript、AJAX 和 JSON 问题

javascript - XMLHttpRequest 仅适用于本地主机

c# - 将正确的 header 值发送到从 Angular $http 到 asp.net webapi 的 Preflight 请求时出错

javascript - 将服务中的函数绑定(bind)到$scope(错误: Cannot set property 'onChange' of undefined)

javascript - 使用 jQuery 将一个元素附加到具有相应索引的不同元素

javascript - 如何将我的日期选择器更改为仅限年份的选择器?

javascript - 拆分非常大的 javascript 文件