Est-il possible de modifier les données XMLHttpRequest du rappel de BeforeSend?

Est-il possible de modifier les données envoyées dans une requête Ajax en modifiant l'objet XMLHttpRequest dans le rappel de BeforeSend? Et si oui, comment puis-je faire cela?

Oui, vous pouvez le modifier, la signature de beforeSend est en fait (dans jQuery 1.4+):

 beforeSend(XMLHttpRequest, settings) 

Même si la documentation vient juste avant la beforeSend(XMLHttpRequest) , vous pouvez voir comment il est appelé ici , où s est l'objet de configuration :

 if ( s.beforeSend && s.beforeSend.call(s.context, xhr, s) === false ) { 

Ainsi, vous pouvez modifier l'argument de data avant alors ( notez qu'il s'agit déjà d' une chaîne par ce point , même si vous avez passé dans un objet). Un exemple de modification devrait ressembler à ceci:

 $.ajax({ //options... beforeSend: function(xhr, s) { s.data += "&newProp=newValue"; } }); 

Si cela contribue, la même signature s'applique au gestionnaire global .ajaxSend() (qui possède la documentation correcte qui le montre), comme ceci:

 $(document).ajaxSend(function(xhr, s) { s.data += "&newProp=newValue"; }); 

Je cherchais cette solution et je me demandais pourquoi je ne trouve pas les s.data, donc j'ai changé le type de demande pour publier et c'était là. On dirait que si vous utilisez la demande GET, la propriété des données n'est pas là, je suppose que vous devez Changer le s.url

Pour obtenir la méthode:

 $.ajax({ type:'GET', beforeSend: function(xhr, s) { s.url += "&newProp=newValue"; } }); 

Pour la méthode post:

 $.ajax({ type:'POST', beforeSend: function(xhr, s) { s.data += "&newProp=newValue"; } });