problème avec les crochets dans jQuery Form Data lors de l’envoi de données en json

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/