2010-03-19 136 views
2

出於安全原因,我已經編寫了一些位於第三方服務器上的HTML/Javascript。此頁面在同一網站上的另一個頁面上執行javascript發佈。但是,它不是用有用的數據進行響應,而是要執行重定向(如果您通過普通的HTML表單發佈到此頁面,它會重定向您的瀏覽器)。我如何處理這個過程?我基本上希望能夠提取它試圖重定向的URL的查詢參數(然後將此鏈接放入隱藏的表單字段中)。獲取jQuery文章重定向響應

這裏是我的基本阿賈克斯後...

$.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); 
    } 
}); 

注意,我張貼的網址是不是一個我控制,所以我有過什麼不返回任何權力。

更新:當我使用上述警報時,我收到「[對象XMLHttpRequest]」和「null」。我正在使用Firefox插件監視這些標題,並且它們看起來像預期的那樣回來了,但我似乎無法通過javascript訪問它們(我也嘗試過x.getResponseHeader('Location'),但那個和所有其他調用getResponseHeader返回空)。

另外:我不知道它是否重要,但狀態代碼是302(而不是301或303)。

謝謝!

回答

2

在JQUery中,您無法從AJAX調用中獲取完整的HTTP標頭,因此無法以這種方式處理重定向。

但是,對於原始javascript請求,您可以訪問XMLHttpRequest getAllResponseHeaders()方法,該方法將允許您處理重定向(this function for single headers)。

+0

我應該能夠得到XMLHttpRequest對象在我成功的回調函數(見格雷格小號的帖子),但它似乎並沒有被得到正確填充,所以我要麼這兩個方法的調用不成功。 – Wickethewok 2010-03-19 22:20:08

5

根據jQuery Documentation成功方法可以接受第三個參數,即XMLHttpRequest對象。 根據Mozilla's XMLHttpRequest page,此對象應具有「狀態」屬性。如果您檢查此屬性的值,並且它是重定向代碼(例如301(永久重定向)或303(臨時重定向)),則知道處理頁面正嘗試執行重定向。應該可以使用「statusText」屬性來確定它嘗試重定向到的位置。 如果您知道它正在嘗試重定向,則可以通過Ajax將數據重新發布到新URL。

但是,奇怪的是,當研究這個時,偶然發現了this page,指示XMLHttpRequest對象應該遵循重定向(請參閱註釋)。所以看起來這將是一個非問題。

除非處理頁面正在使用HTML元重定向(如下圖)來執行重定向。在這種情況下,我不確定可以做什麼 - 也許嘗試解析返回的元標記HTML並查看是否有任何人嘗試重定向。

<meta http-equiv="refresh" content="0;url=http://www.example.com/some-redirected-page"> 
+0

我向成功回調函數中添加了第三個參數;但是,當我嘗試調用x.getAllResponseHeaders()時,它將返回null。 – Wickethewok 2010-03-19 22:13:20

+1

statusText和status應該只是XMLHttpRequest對象的屬性,可能不需要調用getAllResponseHeaders。像alert(x.statusText)或alert(x.status)是否有效? – sqrl0 2010-03-21 21:20:54

+0

你找到getAllResponseHeaders()'返回null的原因嗎? – 2010-08-24 13:30:34

0

對不起,不是直接回答你的問題,但我相信它也可以使用jQuery,因爲Prototype很簡單。

 
// Warning: this is Prototype, not jQuery ;-) 
//... 
onComplete: function(response) { 
    var refresh = response.getResponseHeader("Refresh"); 
    var whatever = response.getResponseHeader("Whatever"); 
} 
//... 
+0

「響應」只是一個XMLHttpRequest?因爲這是我回到jQuery中,它只是沒有正確填充... – Wickethewok 2010-03-19 22:18:43