Fondamentalement, ce que dit le titre, je veux obtenir l'URL et le verbe HTTP d'un xhr. Est-ce possible?Obtenir la méthode et l'URL à partir d'un XHR
Répondre
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.
Bien que cette solution de contournement (+1) soit nécessaire, il faut que ce soit ... –
@Pablo: Vous pouvez éventuellement recréer tout l'objet XMLHttpRequest pour le remplacer à la place. Voir ma mise à jour –
getRequestHeader
pour des considérations futures.
@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'). –
@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. –
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()'). –
que voulez-vous exactement? –
Étant donné un objet XHR, obtenez le verbe HTTP et l'URL –