2010-03-30 3 views
4

Est-ce que la méthode jQuery $.ajaxSetup ne respecte pas le champ data dans le hachage des options lorsque $.post ou $.get est appelée?

Par exemple, je pourrais avoir ce code:

$.ajaxSetup({ data: { persist: true } }); 

Ensuite, pour envoyer une requête POST, je qualifierais ceci:

$.post("/create/something", { name: "foo" }); 

Je me attendais les données POST réelles pour ressembler ceci:

{ 
    persist: true, 
    name: "foo" 
} 

mais les seules données envoyées par $.post est { name: "foo" }. Y at-il un moyen d'obtenir le comportement attendu? J'utilise jQuery 1.4.1.

Répondre

6

$.ajaxSetup() définit les valeurs par défaut pour vos requêtes ajax. Toutes les options que vous définissez dans la méthode de requête remplaceront ces valeurs par défaut, pas les fusionner. Vous êtes en train de remplaçant

{ persist: true } 

avec

{ name: "foo" } 


Ce ne semble plus être le cas — a ticket on the jQuery tracker suggère que cela a été ajouté dans une version mise à jour et jQuery fusionne maintenant les objets au lieu de remplacer la valeur par défaut (merci @Quincy).

+2

Bien que cette question date d'un an, la fusion fonctionne maintenant. Il suffit de commenter ici au cas où quelqu'un lirait ça. @see http://bugs.jquery.com/ticket/3387 – Quincy

+0

J'ai essayé de fusionner un paramètre post dans ajaxSetup avec des données en utilisant serializeArray mais cela remplace le paramètre défini dans axaxSetup http://stackoverflow.com/questions/ 21501224/define-global-ajax-post-param-et-merge-with-different-requests –

0

Comme documentation dit data l'option est convertie en chaîne de requête et ajoutée à l'URL pour les requêtes GET.

+0

Je pense que la documentation n'est pas claire ici. Pour une requête POST, 'data' doit être converti en une chaîne de requête et envoyé via le corps POST. –

Questions connexes