Foros del Web » Programando para Internet » Jquery »

JQuery: Enviar un formulario con un gran número de campos mediante AJAX

Estas en el tema de JQuery: Enviar un formulario con un gran número de campos mediante AJAX en el foro de Jquery en Foros del Web. Buenos días, estoy empezando a meterme con esto de la programación web, (hasta ahora sólo me dedicaba a diseñar) y me estoy encontrando con un ...
  #1 (permalink)  
Antiguo 21/01/2013, 06:20
 
Fecha de Ingreso: enero-2013
Mensajes: 2
Antigüedad: 11 años, 11 meses
Puntos: 0
Pregunta JQuery: Enviar un formulario con un gran número de campos mediante AJAX

Buenos días,

estoy empezando a meterme con esto de la programación web, (hasta ahora sólo me dedicaba a diseñar) y me estoy encontrando con un problema a la hora de guardar los datos. Supongo que será algún concepto que no domino, pero seguro que vosotros lo domináis a la perfección, por eso disculpad si la pregunta es de lo más elemental.

El caso es que tengo que generar un formulario con 12 preguntas (tipo combo: SELECT de 4 posibles valores cada una) para cada uno de los subdepartamentos de una empresa. El número de subdepartamentos depende del departamento elegido en un primer paso. En consecuencia, si sólo hay un subdepartamento, sólo habrá 12 campos y si hay 10, habrá 120 campos.

El caso es que estoy empleando el método $.ajax() para enviar la información del cliente a la base de datos y obtener una respuesta para informar al usuario de si los datos se han guardado correctamente o no.

Los campos a enviar los nombro "IDsubdepartamento_IDpregunta", por lo que el "chorizo" que obtengo finalmente es algo del tipo: &1_0=2&1_1=3&1_3=1... etc

El código del submit es:

Código:
//	Setup call
		$.ajax({
		  type: 'GET',
		  url: 'survey_actions.php?action=save',
		  data: { parameters: Base64.encode($("#mySurvey").serialize()) },
		  dataType: 'text',
		  beforeSend:function(){
		  	//	Load wait panel
		  	loader("on");
		  },
		  success:function(response){
[...]
Como véis, los valores de las respuestas los serializo y los codifico en Base64 para aliviar un poco la longitud de la cadena enviada, pero aun así, sigo teniendo un problema, que es que cuando el número de campos es elevado, "parameters" no llega completo al método "save" del servidor.

Me imagino que esta forma de enviar los datos es una burrada, pero no tengo ni idea de como estructurarlo, teniendo en cuenta que debo enviar todos los datos que aparecen en pantalla, sin ignorar las respuestas no puntuadas.

Desde ya, muchas gracias por vuestra ayuda.
  #2 (permalink)  
Antiguo 21/01/2013, 06:48
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 5 meses
Puntos: 1567
Respuesta: JQuery: Enviar un formulario con un gran número de campos mediante AJAX

Como primera medida no usaría
'survey_actions.php?action=save'
isaría solo
'survey_actions.php'
y crearía un campo hidden en el form con name action y value save, con lo cual tu serialize() recibiría el parámetro
y tendrías que hacer
data: $("#mySurvey").serialize()
si no estás pasando la query como un parámetro único y codificado en base64

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #3 (permalink)  
Antiguo 21/01/2013, 06:55
 
Fecha de Ingreso: enero-2013
Mensajes: 2
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: JQuery: Enviar un formulario con un gran número de campos mediante AJAX

Gracias por responder tan rápido emprear :)

Tienes razón en cuanto al parámetro "action", corregido!

En cuanto a la codificación de los parámetros, comentar que inicialmente lo tenía como me comentas, sin codificar a Base64, es decir:

Código:
data: $("myForm").serialize()
Pero los datos llegaban igualmente cortados al servidor y se perdían.

Dado que no lo he comentado: mi idea es guardar los resultados serializados en un campo en la base de datos, ya que el número de subdepartamentos es variable.

Gracias.

Etiquetas: ajax, campos, formulario, javascript, js, mediante
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:04.