2012-05-14 50 views
0

我試圖創建一個Ajax請求,然後解析響應報頭獲得「位置」屬性。這是我的代碼:Ajax請求,但沒有內容

var request = new XMLHttpRequest(); 
request.onreadystatechange = function() { 
    if(request.readyState == 4 && request.status == 301) { 
     alert('test'); 
     var header = request.getResponseHeader('Location'); 
     console.log(header); 
    } 
} 
request.open('GET', hrefAttr, true); 
request.send(null); 

的問題是,由於某種原因,請求發送和接收到響應過(紅色「GET」請求+螢火蟲響應),但我沒有得到任何「測試「警報或螢火蟲控制檯中的任何文字。

編輯:這是修改後的代碼:

var request = new XMLHttpRequest(); 
request.onreadystatechange = function() { 
console.log(request.readyState); 
    if(request.readyState <= 3 && request.status == 301) { 
     alert('test'); 
     var header = request.getResponseHeader('Location'); 
     console.log(header); 
    } 
    else if (request.readyState == 0 && request.status == 301) { 
     alert('state0'); 
    } 
} 
request.open('GET', hrefAttr, true); 
request.send(); 

的console.log(request.readyState)給出的狀態序列:1,1,2,4。

在Firebug控制檯標籤Http Request + Response顯示正常,但顯示爲紅色(如果這意味着什麼)。

不知道爲什麼我就不能正常工作... 編輯:我使用的是Firefox。

在此先感謝!

+0

您確定迴應代碼是301嗎? – Gary

+0

是的,在我得到的頭文件中:「HTTP/1.1 301 Moved」。 –

+0

readyState如何,偶然是0嗎? – Gary

回答

2

不幸的是,XHR將按照301並返回重定向頁面的內容。你可以看到在W3C here.

記錄如果XMLHttpRequest的起源和請求URL的來源是相同的起源透明地執行重定向,同時觀察同源請求事件規則的行爲。

所以基本上,你的要求是透明繼301。瀏覽器會自動重定向,你無法做你打算做的事情。如果您可以控制Web服務器,則可以更改(儘管大多數建議都是這樣)。

希望這會有所幫助!

+0

這實際上很奇怪。當我發送請求時,我沒有被重定向,我收到了一個響應,其中包含良好的「301」狀態,並且Firebug中的標題甚至向我顯示了「位置:XYZ」信息。編輯:我檢查並沒有在Http頭中的任何HTML。 –

相關問題