2010-07-16 11 views
15

Actualmente tengo la siguiente matriz de JavaScript:¿Cómo elimino los corchetes al final de un nombre de variable JS durante las llamadas AJAX?

var stuffs = ['a', 'b']; 

que pase lo anterior al código de servidor utilizando jQuery load:

var data = { 
    'stuffs': stuffs 
}; 

$(".output").load("/my-server-code/", data, function() { 
}); 

En el lado del servidor, si puedo imprimir el contenido de request.POST (I Actualmente estoy usando Django), me sale:

'stuffs[]': [u'a', u'b'] 

Aviso del [] en la pref ix del nombre de la variable stuffs. ¿Hay alguna manera de eliminar ese [] antes de que llegue al código del servidor?

Respuesta

31

Este es el comportamiento por defecto in jQuery 1.4+ ... si desea que el mensaje sea &stuffs=a&stuffs=b en lugar de &stuffs[]=a&stuffs[]=b se debe configurar el traditional option a true, así:

$.ajaxSetup({traditional: true}); 

Nota esto afecta a todas las solicitudes, que ... generalmente es lo que quieres en este caso. Si desea que sea por solicitud, debe utilizar la llamada más larga $.ajax() y establecer traditional: true ahí. You can find more info about traditional in the $.param() documentation.

+4

En 1.10 $ .ajaxSettings no se puede canjear - se debe usar $ .ajaxSetup en su lugar - su uso es el mismo que el anterior. –

-3

El [] indica que la variable es una matriz. Imagino que la adición del [] a su nombre de variable es la manera en que Python/Django le dice que es una matriz. Probablemente pueda implementar su propia función de impresión que no los muestre.

+0

¿Eso significa que la adición de [] proviene de Django en lugar de javascript? –

-1

Cuando una matriz se envía utilizando una solicitud GET, a través de un formulario o AJAX, cada elemento recibe el nombre de la matriz, seguido de un par de corchetes opcionalmente vacíos. Entonces jQuery está generando la url http://example.com/get.php?stuff[]=a&stuff[]=b. Esta es la única forma de enviar una matriz y el javascript sigue el estándar.

POST solicitudes funcionan exactamente de la misma manera (a menos que el json se envíe como una cadena json larga).

En PHP, esto se analiza de nuevo en la matriz original, por lo que aunque la cadena de consulta puede ser un poco extraña, los datos se reciben tal como se enviaron. $_GET['stuff'][0] funciona correctamente en PHP.

No estoy seguro de cómo Django analiza las cadenas de búsqueda.

+1

"Esta es la única forma de enviar una matriz y el javascript sigue el estándar". - No es * un estándar, pero es una convención de Rails/PHP. Las matrices se pueden enviar perfectamente legalmente como foo = 1 y foo = 2. – jholster

Cuestiones relacionadas