2010-08-27 136 views
2

我試圖覆蓋XMLHttpRequest對象上的getResponseBody方法。代碼如下這樣:無法覆蓋XMLHttpRequest上的getResponseHeader方法

xhr.onreadyStateChange = function(){ 
    if (xhr.readyState !== 4) { 
     return; 
    } 
    if (xhr.status === 200) { 
     // callback to handle the result 
    } else { 
     var _orig = xhr.getResponseHeader; 
     xhr.getResponseHeader = function(name){ 
      return decodeHeader(_orig.apply(xhr,[name])); 
     }; 
     // callback to handle the failure 
    } 
} 

它拋出調用_orig.apply時錯誤「對象不支持此屬性或方法」。

有什麼想法?謝謝。 PS:我每次創建一個新的XHR對象,不要重複使用舊的XHR對象。

回答

3

XMLHttpRequest是一個host object(即由環境提供以表示環境而不是語言的一部分的對象),並且主對象可以基本上做他們喜歡的任何事情。它們不像內置對象那樣受到相同的規則約束。 IE尤其值得注意,因爲它利用了這種自由,其許多主機對象(包括XMLHttpRequest)的行爲並不像人們希望的那樣。

因此,最好不要嘗試添加或更改任何主機對象的任何屬性。相反,寫你自己的XMLHttpRequest包裝。

+0

另請參閱http://ajaxian.com/archives/ie7-xmlhttprequest-native-or-not – 2010-08-27 10:14:51

+0

Marcel:是的。對於任何瀏覽器的「XMLHttpRequest」實現來說,「Native」是單詞的一個奇怪選擇:它始終是一個主機對象。對於Web開發人員來說,IE 7的這種變化幾乎沒有什麼實際影響,除非IE 6已經足夠讓人無視了。 – 2010-08-27 10:33:34