Foros del Web » Programando para Internet » Javascript » Frameworks JS »

¿Array y Ajax?

Estas en el tema de ¿Array y Ajax? en el foro de Frameworks JS en Foros del Web. Buenas, Estoy realizando pruebas para insertar datos en una base de datos mediante ajax, todo va bien, pues es sencillo, no es complicado. El problema ...
  #1 (permalink)  
Antiguo 19/09/2009, 10:53
Avatar de OsSk4R  
Fecha de Ingreso: octubre-2006
Ubicación: $this->home
Mensajes: 824
Antigüedad: 18 años, 2 meses
Puntos: 74
¿Array y Ajax?

Buenas,

Estoy realizando pruebas para insertar datos en una base de datos mediante ajax, todo va bien, pues es sencillo, no es complicado.

El problema ha surjido cuando uno de esos datos es array, concretamente ofrezco la posibilidad de seleccionar (en este caso) varios generos.

Tengo un pequeño form que contiene:
Titulo,
Letra,
Idioma y
Generos


Donde, como he dicho, en generos salen varios checkbox para que el usuario seleccione.

Si yo quito los generos todo me lo sube correctamente, y si los envio sin ajax igual, el problema es que cuando he añadido los generos en el codigo ajax, no me los ha subido y ahora no me sube nada.

Por lo tanto, ¿que hay que hacer en este caso?

Mi codigo ajax es el siguiente:

Código ajax:
Ver original
  1. function objetoAjax(){
  2.  
  3. var xmlhttp=false;
  4.  
  5. try {
  6.  
  7.  
  8. xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  9.  
  10. } catch (e) {
  11.  
  12. try {
  13.  
  14. xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  15.  
  16. } catch (E) {
  17.  
  18. xmlhttp = false;
  19.  
  20. }
  21.  
  22.  
  23. }
  24. if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
  25.  
  26.   xmlhttp = new XMLHttpRequest();
  27.  
  28.   }
  29.  
  30.   return xmlhttp;
  31.  
  32.   }
  33. function enviarDato(){
  34.  
  35.   //donde se mostrará lo resultados
  36.  
  37.  
  38.   divResultado = document.getElementById('resultado');
  39.  
  40.   //valores de los inputs
  41.  
  42.   titulo=document.nueva.titulo.value;
  43.    letra=document.nueva.letra.value;
  44.     idioma=document.nueva.idioma.value;
  45.      generos=document.nueva.generos.value;
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.   //instanciamos el objetoAjax
  54.  
  55.   ajax=objetoAjax();
  56.  
  57.   //uso del medotod POST
  58.  
  59.   //archivo que realizará la operacion
  60.  
  61.   //registro.php
  62.  
  63.  
  64.   ajax.open("POST", "procesar.php",true);
  65.  
  66.   ajax.onreadystatechange=function() {
  67.  
  68.   if (ajax.readyState==4) {
  69.  
  70.   //mostrar resultados en esta capa
  71.  
  72.   divResultado.innerHTML = ajax.responseText
  73.  
  74.  
  75.   //llamar a funcion para limpiar los inputs
  76.  
  77.   LimpiarCampos();
  78.  
  79.   }
  80.  
  81.   }
  82.  
  83.   ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
  84.  
  85.  
  86.   //enviando los valores
  87.  
  88.   ajax.send("titulo="+titulo+"&letra="+letra+"&idioma="+idioma+"&generos="+generos)
  89.  
  90.   }
  91.  
  92. function LimpiarCampos(){
  93.  
  94.  
  95.   document.nueva_pelicula.titulo.value="";
  96.   document.nueva_pelicula.letra.value="";
  97.   document.nueva_pelicula.idioma.value="";
  98.   document.nueva_pelicula.generos.value="";
  99.  
  100.   document.nueva_pelicula.titulo.focus();
  101.  
  102.   }

Muchas gracias,
  #2 (permalink)  
Antiguo 19/09/2009, 15:13
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 18 años
Puntos: 126
Respuesta: ¿Array y Ajax?

Hola

Lo que parece que está ocurriendo es que todos los ckeckbox tienen el mismo nombre. Así que este guión a modo de ejemplo puede ayudarte. Una vez que entiendas su funcionamiento y lo adaptes a lo que te ocupa, incrustalo en la función enviarDato

Código javascript:
Ver original
  1. <html>
  2. <head>
  3. <script type="text/javascript">
  4. function valores(f, cual) {
  5.  todos = new Array();
  6.  for (var i = 0, total = f[cual].length; i < total; i++)
  7.    if (f[cual][i].checked) todos[todos.length] = f[cual][i].value;
  8.   return todos.join(".");
  9. }
  10. </script>
  11. </head>
  12. <body >
  13. <form>
  14. <input name="t[]" type="checkbox" value="0000" />
  15. <input name="t[]" type="checkbox" value="1111" />
  16. <input name="t[]" type="checkbox" value="2222" />
  17. <input name="t[]" type="checkbox" value="3333" />
  18. <input name="t[]" type="checkbox" value="4444" />
  19. <input name="t[]" type="checkbox" value="5555" />
  20. <button onclick="alert(valores(this.form, 't[]'))" >mostrar</button>
  21. </form>
  22. </body>
  23. </html>

Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #3 (permalink)  
Antiguo 21/09/2009, 09:14
Avatar de OsSk4R  
Fecha de Ingreso: octubre-2006
Ubicación: $this->home
Mensajes: 824
Antigüedad: 18 años, 2 meses
Puntos: 74
Respuesta: ¿Array y Ajax?

Buenas,

Los checkbox son generos que los estoy sacando de la base de datos y tienen nombres distintos.

Este es el código:

Código ejemplo:
Ver original
  1. Generos:
  2. <?php
  3.                     $sqlGeneros=mysql_query("SELECT * FROM generos ORDER BY g_p",$conexion);
  4.                     while($MostrarGeneros=mysql_fetch_array($sqlGeneros)){
  5.                         $id_genero = $MostrarGeneros['id_genero'];
  6.                         $nombre_genero = $MostrarGeneros['g_p'];
  7. ?>
  8. <input id="a1" name="id_genero[]" type="checkbox"  value="<?php echo $id_genero; ?>"/>&nbsp;<?php echo htmlentities($nombre_genero, ENT_QUOTES); ?><br>
  9. <?php
  10. }
  11. ?>

Con php se hacerlo, el problema es que quiero utilizar Ajax y con ajax también se subir datos "normales" el probelma empezó ahí, a la hora de querer subir datos seleccionados por el usuario, como son los varios checkbox.

¿Como puedo hacerlo?
Es que el ejemplo aun estoy verde para implementarlo en Ajax.

Saludos y gracias,
  #4 (permalink)  
Antiguo 21/09/2009, 12:50
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 18 años
Puntos: 126
Respuesta: ¿Array y Ajax?

Hola

Todos tienen el mismo nombre name="id_genero[]", de hecho es como lo estás recogiendo generos=document.nueva.generos.value;

Sin pararme mucho, sería algo como esto

Código javascript:
Ver original
  1. for (var i = 0; i < document.nueva.["id_genero[]"].length; i++) {
  2.  
  3.    if (document.nueva.["id_genero[]"][i].checked); generos = document.nueva.["id_genero[]"][i].value;
  4. }

Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #5 (permalink)  
Antiguo 22/09/2009, 15:24
Avatar de cesarpunk  
Fecha de Ingreso: enero-2008
Ubicación: Lima
Mensajes: 943
Antigüedad: 16 años, 11 meses
Puntos: 9
Respuesta: ¿Array y Ajax?

osea tus checkboxes son dinamicos verdad? entonces deberias tener algo como esto:

<input name="id_genero[]" type="checkbox" value="<?php echo $id_genero; ?>">

ahi todo bien....

Nota: Yo por ahi tengo un truquito por culpa de ajax.. que es la de la contabilizacion de checkbox.... debido a que los checkbox son dinamicos no entiendo hasta ahora porque mi bucle no contabiliza cuando hay solo un checkbox pero si me contabiliza cuando hay mas de uno.

Lo que debes hacer es que antes de tu while pongas una variable $cantidad=0 y dentro de tu while lo vayas acumulando.... el resultado lo pones en un textbox (opculto) que te saque el total de checkbox.... entonces a ese textbox lo vas a llamar 'cantidadcheck'

Y en tu funcion ajax vas a hacer lo siguiente: (este ejemplo es solo para los checkboxes luego le agregas los demas datos que desees... y no olvidarse del textbox que tiene la cantidad de checks)


Código:
function EnviaDatos(){
var c = document.getElementById('divresultado');
var cantidadcheck = document.frm.cantidadcheck.value;

var checkboxes = new Array();
	var arrClaves = new Array();
	j=0;ff=0;
	
	if(cantidadcheck=='1'){
		var arr_uno = document.frm["id_genero[]"].value;
		arrClaves[j]=arr_uno;
		checkboxes[ff]="&id_genero[]="+arrClaves[j];
		
		if(!document.frm["id_genero[]"].checked){
			alert("Debe seleccionar los checkbox.");
			return false;	
		}
	}
	else{
	
		selectcheck=false;
		
		for(i=0;i < document.frm["id_genero[]"].length; i++){
			if(document.frm["id_genero[]"][i].checked){
	
				var arr_uno = document.frm["id_genero[]"][i].value;
				arrClaves[j]=arr_uno;
				checkboxes[ff]="&id_genero[]="+arrClaves[j];
				ff++;
				j++;
				selectcheck=true;	
			}
		}
		
		if(!selectcheck){
			alert("Debe seleccionar los checkbox.");
			return false;
		}

	}
ajax=nuevoAjax();
	c.innerHTML = '<img src="images/sending.gif">';
	ajax.open("POST", "script.php",true);
	ajax.onreadystatechange=function(){
		if (ajax.readyState==4) {
			c.innerHTML = ajax.responseText
		}
	}
	ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	ajax.send("checkboxes="+checkboxes+"&control=enviado");
}
Lo que hago es preguntar por la cantidad de checkbox.... si es uno, solo mando un valor simple en el array 'checkboxes', pero si son mas armo el array y lo mando al array 'checkboxes'

Pero lo curioso es que en mi script de php solo recibire el dato:

Código PHP:
$genero_id=$_POST['id_genero'];

//para recibirlos debemos recorrer el array

for( $i 0$i count($genero_id); $i ++){
     
$genero=explode(',',$genero_id[$i]);
     echo 
$genero[0];

Con esto capturamos todos los checkboxes dinamicos marcados
__________________
Quitenme la vida pero no la bebida.
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 23:37.