出于安全原因,我写了一些位于第三方服务器上的HTML / Javascript。此页面执行javascript帖子到同一站点上的另一个页面。但是,它不是响应有用的数据,而是想要执行重定向(如果您通过普通的HTML表单发布到此页面,它将重定向您的浏览器)。我该如何处理这个过程?我基本上希望能够提取它试图重定向的url的查询参数(然后将此链接放入隐藏的表单字段中)。
这是我的基本ajax帖子......
$.ajax({
url: '/someurl/idontcontrol',
data: serialized_form_data,
async: false,
type: 'POST',
success: function(data, textStatus, x) {
alert(x);
alert(x.getAllResponseHeaders());
return false;
$('#redirect_link').val(WHAT_DO_I_PUT_HERE);
}
});
请注意,我发布的网址不是我控制的网址,因此我对其返回的内容无权。
更新:当我使用上述警报时,我收到“[object XMLHttpRequest]”和“null”。我正在使用Firefox插件监控标题,它们似乎按预期回来了,但我似乎无法通过javascript访问它们(我也尝试过x.getResponseHeader('Location'),但是那个和所有其他对getResponseHeader的调用返回空)。
另外:我不知道是否重要,但状态代码是302(而不是301或303)。
谢谢!
答案 0 :(得分:5)
根据jQuery Documentation,success方法可以采用第三个参数,即XMLHttpRequest对象。 根据{{3}},此对象应具有“status”属性。如果检查此属性的值,并且它是重定向代码,例如301(永久重定向)或303(临时重定向),则会知道处理页面正在尝试执行重定向。应该可以使用“statusText”属性来确定尝试将您重定向到的位置。 如果您知道它正在尝试重定向,则可以通过Ajax将数据重新发布到新URL。
奇怪的是,在研究这个时,偶然发现了Mozilla's XMLHttpRequest page,表明XMLHttpRequest对象应该遵循重定向(参见注释)。所以看起来这不是问题。
除非处理页面使用HTML元重定向(如下所示)进行重定向。在这种情况下,我不确定可以做什么 - 也许尝试解析返回的元标记的HTML,看看是否有任何人正在尝试重定向。
<meta http-equiv="refresh" content="0;url=http://www.example.com/some-redirected-page">
答案 1 :(得分:2)
您无法从JQUery中的AJAX调用获取完整的HTTP标头,因此您无法以这种方式处理重定向。
但是,对于原始javascript请求,您可以访问XMLHttpRequest getAllResponseHeaders()方法,该方法允许您处理重定向(this function for single headers)。
答案 2 :(得分:0)
很抱歉,不是直接回答你的问题,但我确信它也可以用jQuery,因为Prototype非常简单。
// Warning: this is Prototype, not jQuery ;-) //... onComplete: function(response) { var refresh = response.getResponseHeader("Refresh"); var whatever = response.getResponseHeader("Whatever"); } //...