J’ai l’object
var dataformdata={"key1":"value1","key2":"value2"};
alors j’ajoute quelques valeurs avec la même clé (key3) comme celle-ci
dataformdata.key3 = []; dataformdata.key3.push("value3"); dataformdata.key3.push("value4");
Je fais ce qui précède dans chaque pente. Tout fonctionne sauf en envoyant l’object dataformdata via la fonction jQuery ajax dans la console du navigateur. Je vois qu’il y a des crochets dans la clé …
$.ajax({ type: "POST", url: "/", data: dataformdata,
…
Voici ce que je vois dans la console du navigateur:
key1:value1 key2:value2 key3%5B%5D:value3 key3%5B%5D:value4
Cela devrait fonctionner car dans la documentation jQuery.ajax (), il est indiqué
L’object doit être une paire clé / valeur. Si value est un tableau, jQuery sérialise plusieurs valeurs avec la même clé en fonction de la valeur du paramètre traditionnel.
Mais pourquoi les crochets (% 5B% 5D) sont-ils dans la clé?
Cette notation avec les crochets dans la clé a été introduite dans jQuery 1.4 pour traiter les tableaux multidimensionnels, ou les tableaux contenant des objects (ou d’autres tableaux) eux-mêmes. Cela aide le désérialiseur à différencier un tableau d’une valeur primitive. Par exemple, si vous n’avez pas les crochets dans la clé, ces deux variables seront sérialisées de la même manière:
var v1 = { "k1":"v1", "k2":"v2", "k3":["v3"] };
et
var v1 = { "k1":"v1", "k2":"v2", "k3":"v3" };
Avec la notation crochet, ils sont codés comme
k1=v2&k2=v2&k3[]=v3
et
k1=v2&k2=v2&k3=v3
respectivement.
vous pouvez également utiliser les parameters traditional
dans l’appel ajax http://api.jquery.com/jquery.ajax/#jQuery-ajax-settings
Type traditionnel: Booléen
Définissez-la sur true si vous souhaitez utiliser le style traditionnel de la sérialisation des parameters.
par exemple:
$.ajax({ /*usual stuff */ traditional: true })
Il est possible d’envoyer plusieurs données avec le même nom de clé à un script. Vous pouvez le faire en ajoutant des crochets []
à la fin du nom de la clé pour indiquer que les données doivent être interprétées comme un tableau.
La fonction qui fait cela est jQuery.param
. Comme exemple de comment cela fonctionne:
$.param({ data: ['value3', 'value4'] });
data
sont un tableau. Lorsqu’il est sérialisé, il est rendu sous forme de data%5B%5D=value3&data%5B%5D=value4
. Le script serveride convertira cela en tableau.
Ceci est principalement une convention de nommage – je pense de PHP – qui indique que la clé ( key3
) a plusieurs key3
. C’est au serveur de les décoder de manière significative.
Plus de détails: http://api.jquery.com/jQuery.param/