2010-03-08 45 views
2

基本上標題說什麼,我想從xhr獲取URL和HTTP動詞。這可能嗎?從XHR獲取方法和URL

+0

你究竟想要什麼? –

+1

給定一個XHR對象,從它獲取HTTP動詞和URL –

回答

2

不是天生的,我很害怕。在原型實現中,您可以編寫自己的原型:

XMLHttpRequest.prototype.__oldOpen = XMLHttpRequest.prototype.open; 
XMLHttpRequest.prototype.verb = ""; 
XMLHttpRequest.prototype.url = ""; 
XMLHttpRequest.prototype.open = function (verb, url, async) 
{ 
    this.verb = verb; 
    this.url = url; 
    this.__oldOpen.call(this, verb, url, async); 
} 

不要指望它在IE7和更老的版本中工作。


我想你可以通過完全重新創建 XMLHttpRequest對象做到這一點,但它會佔用大量的工作來獲取正確的事:

var oldXHR = XMLHttpRequest; 
function XMLHttpRequest() 
{ 
    var realXHR = new oldXHR(); 
    this.onreadystatechange = function() {} 
    this.open = function (verb, url, async) 
    { 
     this.verb = verb; 
     this.url = url; 
     realXHR.open(verb, url, async); 
    { 
    this.send = function() { realXHR.send(); } 

    // all other properties and methods... 
} 

當然,你必須去的努力正確綁定onreadystatechange並設置status

+0

很好的解決方法(+1),我需要它是交叉瀏覽器,雖然... –

+0

@Pablo:你可能重新創建整個XMLHttpRequest對象來覆蓋它。查看我的更新。 –

1
Currently,沒有 標準從XHR對象獲取HTTP動詞或url的方式。但是,W3C正在考慮 getRequestHeader以備將來考慮。
+0

@nvl:這樣的函數會返回動詞或URL嗎?我知道'host'是一個請求標題,但動詞和路徑在所有已命名標題(來自Fiddler:'GET /fiddler2/updatecheck.asp?isBeta=False HTTP/1.1')之前成爲一行。 –

+0

@Andy:請參考url('當前')。這將在未來的修訂中考慮。所以規範還沒有定義。它可能包含請求頭中的所有信息。 –

+0

的確如此,但我假設(相當安全,我認爲)一個標記爲'getRequestHeader()'的函數將採用單個參數作爲頭的名稱(很像'getResponseHeader()')。 –