jquery - objects - json object javascript
problema con los corchetes en los datos de jQuery Form cuando se envĂan datos como json (4)
Es posible enviar varios datos con el mismo nombre de clave a un script. Puede hacer esto agregando corchetes []
al final del nombre de la clave para designar que los datos deben interpretarse como una matriz.
La función que hace esto es jQuery.param
. Como ejemplo de cómo funciona esto:
$.param({
data: [''value3'', ''value4'']
});
data
son una matriz. Cuando se serializa, se representa como data%5B%5D=value3&data%5B%5D=value4
. El script del servidor lo convertirá en una matriz.
Tengo el objeto
var dataformdata={"key1":"value1","key2":"value2"};
Luego agrego algunos valores más con la misma clave (key3) como esta
dataformdata.key3 = [];
dataformdata.key3.push("value3");
dataformdata.key3.push("value4");
Hago lo anterior en cada pendiente. Todo funciona, excepto cuando se envía el objeto dataformdata a través de la función jQuery ajax en la consola del navegador, veo que hay llaves en la clave ...
$.ajax({ type: "POST", url: "/", data: dataformdata,
...
Esto es lo que veo en la consola del navegador:
key1:value1
key2:value2
key3%5B%5D:value3
key3%5B%5D:value4
Debería funcionar porque en los documentos jQuery.ajax () dice
El objeto debe ser pares clave / valor. Si el valor es una matriz, jQuery serializa múltiples valores con la misma clave en función del valor de la configuración tradicional
Pero, ¿por qué los corchetes (% 5B% 5D) están en la clave?
Esta notación con los corchetes en la clave se introdujo en jQuery 1.4 para tratar arrays multidimensionales o arrays que contienen objetos (u otros arrays). Esto ayuda al deserializador a diferenciar entre una matriz y un valor primitivo. Por ejemplo, si no tenía los corchetes en la clave, esas dos variables se serializarían de la misma manera:
var v1 = { "k1":"v1", "k2":"v2", "k3":["v3"] };
y
var v1 = { "k1":"v1", "k2":"v2", "k3":"v3" };
Con la notación de corchete, están codificados como
k1=v2&k2=v2&k3[]=v3
y
k1=v2&k2=v2&k3=v3
respectivamente.
Esto es principalmente una convención de nomenclatura, creo que desde PHP, que indica que la clave ( key3
) tiene key3
. Depende del servidor decodificarlos de manera significativa.
Más detalles: http://api.jquery.com/jQuery.param/
También puede usar la configuración traditional
en la llamada ajax http://api.jquery.com/jquery.ajax/#jQuery-ajax-settings
Tipo tradicional: booleano
Establézcalo en verdadero si desea utilizar el estilo tradicional de serialización de parámetros.
por ejemplo:
$.ajax({
/*usual stuff */
traditional: true
})