2010-03-08 3 views

Répondre

2

Pas nativement, j'ai peur. Dans les implémentations prototypable vous pouvez écrire votre propre prototype:

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

Ne vous attendez pas à travailler dans IE7 et plus cependant.


Je suppose que vous pouvez le faire en recréant complètement l'objet XMLHttpRequest, mais il faudrait beaucoup de travail pour y arriver:

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... 
} 

Bien sûr, vous devez aller à l'effort de correctement la liaison onreadystatechange et le réglage de la status, etc.

+0

Bien que cette solution de contournement (+1) soit nécessaire, il faut que ce soit ... –

+0

@Pablo: Vous pouvez éventuellement recréer tout l'objet XMLHttpRequest pour le remplacer à la place. Voir ma mise à jour –

1
Currently, il n'y a pas moyen standard pour obtenir verbe HTTP ou URL de l'objet XHR. Mais, W3C envisage getRequestHeader pour des considérations futures.
+0

@nvl: Une telle fonction retournerait-elle le verbe ou l'URL? Je sais que 'host' est un en-tête de requête, mais le verbe et le chemin vont sur une ligne avant tous les en-têtes nommés (à partir de Fiddler:' GET /fiddler2/updatecheck.asp?isBeta=False HTTP/1.1'). –

+0

@Andy: veuillez vous référer à l'URL ('actuellement'). Il sera considéré dans les futures révisions. Donc, la spécification n'est toujours pas définie. Il contiendra probablement toutes les informations contenues dans l'en-tête de la demande. –

+0

en effet, mais je supposais (plutôt sans risque, je pense) qu'une fonction étiquetée 'getRequestHeader()' prendrait un seul paramètre pour le nom de l'en-tête (un peu comme 'getResponseHeader()'). –