2009-10-20 4 views
2

Pour résoudre le problème this, je me demandais si quelqu'un connaissait un moyen de modifier l'URL d'un objet XMLHttpRequest avant de l'envoyer.Modifier l'URL d'un objet XMLHttpRequest

Idéalement, je veux changer le uri (encoder) en cas beforeSend (en utilisant jQuery $.ajaxSetup) au lieu de changer dans tous les endroits où j'utilise .ajax

$ Merci!

Répondre

4

Selon the documentation, la méthode beforeSend() est passé l'objet XMLHttpRequest comme paramètre, et son pointeur this est réglé sur les options de demande Ajax. Le XMLHttpRequest n'a pas un attribut qui est l'URL, mais le W3C documentation semble dire que peut être appelé plusieurs fois sur une instance donnée méthode open() de l'objet:

beforeSend: function(xhr) { 
    // if you're doing authenticated requests, you might have to 
    // call the 5-argument form of open() instead 
    xhr.open(this.type, this.url.replace(/* whatever with whatever... */), this.async); 
    } 

Un problème potentiel avec ce faire est que l'appel open() efface tous les en-têtes de demande qui ont été définis, donc vous devrez peut-être ajouter du code supplémentaire pour ajouter à nouveau les en-têtes que jQuery définit avant d'appeler beforeSend().

EDIT: Effectivement. Maintenant que j'ai jeté un oeil au jQuery source, vous avez raison: l'URL est définie avant que la méthode beforeSend() ne soit invoquée. J'espère que les révisions ci-dessus fonctionneront pour vous.

+0

C'est ce que j'ai essayé en premier, mais l'objet XMLHttpRequest a déjà été construit à ce moment-là et donc l'édition de l'URL dans les options de requête ne fonctionne pas. J'ai besoin d'éditer l'instance 'xhr' passée. – psychotik

Questions connexes