2010-07-08 93 views
11

所以 - 我有这个ajax请求,请参阅。金发,大约6英尺高,看起来是这样的:找出Jquery ajax请求被重定向到的位置

$.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”。我想要做的是找出第二个网址是什么(以编程方式 - 每次都会有所不同,所以只检查萤火虫并不能帮助我)。我已经尝试过回复“完整”回调的响应头文件,但这只是给了我第二次请求时返回的内容。

约束条件: - 我无法控制它运行的服务器 - 只是js。 - 如果我必须(dojo?原型?)可以切换框架

理想情况下,我会做一些头/头请求/ makeThing找出重定向url是通过只获得最初的302响应。

失败(因为jquery auto-follow重定向,似乎没有办法介入请求之间),我得到检索最终的响应,并使用它以某种方式得到的URL ... ...的东西?请求对象,也许?

TLDR:发送ajax请求。框架自动遵循生成的302重定向。我如何确定它重定向到的位置?

编辑,澄清: 最终URL会有所不同每次通话时间“makeThing”导致服务器创造什么在“getThing/ABC123”

+0

检查它与萤火虫。 – 2010-07-08 01:59:12

回答

0

你为什么不只需将URL此后托管'http://example.com/makeThing'进入你的浏览器,看看你最终在哪里?

+0

重定向可能取决于数据 - 即是否有效 - >重定向到下一页。如果它无效 - >重定向到编辑页面。如果它是XHR而不是常规请求,它也可能会有所不同。例如,这在Rails中并不罕见。 – 2010-07-08 01:54:41

+0

正如我在更正中提到的那样,最终的网址会在每个请求中进行调整。 makeThing生成一个ID为'abc123'的'东西',此后可以通过getThing/abc123访问。因此,为什么我需要以编程方式访问这个东西。 – Fishtoaster 2010-07-08 03:28:27

0

如果您启动了萤火虫,然后打开控制台,您可以按照要求实际去的地方。当您看到AJAX请求已完成处理时,展开该控制台项目,您将看到涉及的请求和任何响应标头。

+0

对不起,如果我不是特别清楚这一点:makeThing是一个生成器函数 - 它重定向到每次它被调用时不同,所以我需要一种方式来以编程方式做到这一点。 – Fishtoaster 2010-07-08 03:00:18

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"); 
    } 
}); 

是的,这有点不好意思,但由于重定向是在XmlHttpRequest对象(无法访问的事件)内部处理的,因此您没有多少选择。

You can check the spec,这是用于XmlHttpRequest的行为:

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

+1

如果我有权访问服务器,那就行了。 :(所有我可以改变的是Javascript。 – Fishtoaster 2010-07-08 13:11:16

+2

@Fishtoaster - AFAIK,你没有任何选择,这只是没有暴露,至少是跨浏览器。你可以阅读的内容找出你是哪一页或者一些替代方法? – 2010-07-08 13:34:52

+0

这可能是我必须做的事情。很脆弱,但我想这就是全部。 – Fishtoaster 2010-07-08 13:47:09

2

这可能不会帮助你的具体情况,但是当我有同样的问题,我注意到我结束了对重定向曾在HTML线索后页:

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

一些页面脚本其中的片段用于添加Facebook评论,这些片段有时也可以包含当前的URL。或者甚至公然为这样:

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

那真的是太糟糕了,我们不能抢头......但马格努斯指出的那样,你可以尝试读取该网页,这将让一些独特的内容你可以确定哪一页实际上是发送给你的...