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

时间:2010-07-08 01:48:47

标签: javascript jquery ajax redirect

所以 - 我有这个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'。我想要做的就是找出第二个网址是什么(以编程方式 - 它每次都会有所不同,所以只需查看firebug对我没有帮助)。我已经尝试了回到'完整'回调的响应标题,但这只是给了我第二次请求时返回的内容。

约束: - 我无法控制正在运行的服务器 - 只有js。 - 如果我必须(dojo?prototype?)

,可以切换框架

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

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

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

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

5 个答案:

答案 0 :(得分:4)

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

You can check the spec,这是XmlHttpRequest的预期行为:

  

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

答案 1 :(得分:2)

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

<meta property="og:url" content="THE_URL_OF_THE_PAGE" />

有些网页上有用于添加Facebook评论的脚本代码段,有时这些代码段也包含当前的网址。或者甚至像这样公然:

<a href="http://www.facebook.com/sharer.php?u=THE_URL_OF_THE_PAGE">

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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