获取jQuery post重定向响应

时间:2010-03-19 21:22:12

标签: javascript jquery http

出于安全原因,我写了一些位于第三方服务器上的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)。

谢谢!

3 个答案:

答案 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");
}
//...
相关问题