2011-02-25 22 views
14

He estado usando el serialize jquery() para serializar los valores de un formulario y enviarlo a través de ajaxjquery serialize y multi seleccione desplegable

como por ejemplo si el nombre de la forma y la identificación es factoryUsers

var data=$("#factoryUsers").serialize();

Ahora bien, esto funciona bien para las formas que tienen los campos de texto, áreas de texto, menús desplegables simples etc. Pero cuando tengo un desplegable múltiple, las cosas van mal por ejemplo si tengo una lista desplegable del tipo

<select size="5" id="factoryUsers" name="factoryUsers" multiple="multiple">

la serialización no funciona correctamente más. así que si selecciono 3 usuarios que reciben una cadena de consulta como

factoryUsers=5&factoryUsers=23&factoryUsers=11

cambiar la selección para el tipo de matriz tampoco ayuda factoryUsers[]

Cualquier idea o ayudar a la manera de conseguir este trabajo correctamente sería estupendo.

+2

Bueno, como Publicado por Jordan, el Jquery está funcionando perfectamente. No estaba seguro si la cadena de consulta factoryUsers = 5 & factoryUsers = 23 & factoryUsers = 11 sería manejada correctamente por el servidor, y resultó que manejó perfectamente ya que obtuve todos los valores en una matriz $ _POST ['factoryUsers'], que era una matriz que tiene 3 valores. Solo por mencionar que utilicé 'factoryUsers []' – Amitabh

+0

pregunta muy útil - ¡gracias por los consejos! – Helmut

Respuesta

11

El resultado de cadena que describió anteriormente es la forma correcta de enviar múltiples valores para formularios con el mismo nombre a través de HTTP, por lo que jQuery funciona correctamente. Depende de usted manejar cómo se procesa esto en el lado del servidor, que luego depende del idioma que está utilizando.

Si está usando PHP, esto puede ayudar: http://bytes.com/topic/php/answers/12267-how-php-_post-gets-multiple-values-html-form

Puede decirnos qué idioma se está utilizando?

+0

Estoy usando PHP. Tiene razón, depende del idioma del lado del servidor para procesarlo correctamente. No estaba seguro si la cadena de consulta factoryUsers = 5 & factoryUsers = 23 & factoryUsers = 11 sería manejada correctamente por el servidor, y resultó que manejó perfectamente ya que obtuve todos los valores en una matriz $ _POST ['factoryUsers'], que era una matriz que tiene 3 valores – Amitabh

+0

Me alegro de que funcionó para usted. Parece que descubrió la forma "especial" de PHP de usar el [] al final del nombre del campo también. Buena suerte con el resto de tu proyecto. – Jordan

+0

Gracias! sí, sabía que PHP puede procesar valores publicados para campos como factoryUsers [], pero lo que no sabía eran valores pasados ​​como factoryUsers [] = 5 & factoryUsers [] = 23 & factoryUsers [] = 11, y cuando vi esta cadena de consulta , Pensé que no se manejaría perfectamente, así que lo publiqué por error, pero no funcionó sin antes probarlo, pensando que algo andaba mal. Gracias, una tonelada por señalarlo, lo que me hizo probar de nuevo. – Amitabh

13

Intente cambiar el nombre de la selección a factoryUsers[]. De esa manera puedes recorrerlo en tu back-end.

7

Todo lo que necesita es cambiar el nombre = "factoryUsers" a name = "factoryUsers []" PHP lo tratará como una matriz.

2

a modo de prueba para obtener el valor de val()

data='factoryUsers=' + $("#factoryUsers").val(); 

que le dará con los valores separada por comas.

factoryUsers = 1,2,4

Si este artículo es uno de su formulario. Luego intente agregar el valor del elemento al final de la serialización. Ejemplo:

data= f.serialize() + '&factoryUsers=' + $('#factoryUsers').val(); 

Dado que, el elemento escrito dos veces en la solicitud, el último valor será válido en el controlador.

1

Usted puede utilizar la función de PHP

parse_str($_POST) 

Esta función parece ser una función de extracción. Después de ejecutar esto, puede acceder a una var llamada $factoryUsers, y esta var es una matriz $factoryUsers[n].

0

Su nombre de cada elemento debe ser tipo array factoryUsers[] Cambiar el código siguiente:

<select size="5" id="factoryUsers" name="factoryUsers[]" multiple="multiple"> 

Gracias ...