AJAX - Como enviar varios tipos de datos con ajax

 
Vista:
Imágen de perfil de JR
Val: 5
Ha disminuido 1 puesto en AJAX (en relación al último mes)
Gráfica de AJAX

Como enviar varios tipos de datos con ajax

Publicado por JR (2 intervenciones) el 25/01/2019 19:52:15
Hola de nuevo gente. Tengo un problemilla de novato que llevo días intentando resolver pero no doy con la llave a pesar de ver mil artículos y tutoriales sobre el tema. Tanto es así, que estoy empezando a pensar que soy bastante muñón para esto de la programación. :(

Estoy haciendo un ejercicio para clase que no es más que la típica tienda online con un carrito de la compra. La página donde salen los artículos es php y el botón para añadir al carrito lo hice con un evento onclick de javascript, que según vas dándole click al botón de cada artículo, ese artículo se va añadiendo al carrito, es decir, a un array bidimensional.

Os dejo el código para que lo podáis ver.

Inicio de sesión y variables de sesión importadas de la página anterior:

1
2
3
4
5
6
<?php
	session_start();
	$nombre=$_SESSION["usuario"];
	$rol=$_SESSION["role"];
	$iu=$_SESSION["idusuario"];
?>

Parte PHP:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
echo "<p class='bienvenida'>Hola " . $nombre . " esta es la lista de artículos.</p>";
$consulta='SELECT ID_ARTICULO, DESCRIPCION, PRECIO, CARACTERISTICAS FROM ARTICULOS';
$resultado=mysqli_query($conexion, $consulta);
echo "<div class='contenedorGeneral'>";
    echo "<div class='listaArticulos'>";
        while($row=mysqli_fetch_assoc($resultado)){
            echo "<div class='articulo'>";
                echo "<div class='id_articulo'>" . $row["ID_ARTICULO"] . "</div>";
                echo "<div class='descripcion'>" . $row["DESCRIPCION"] . "</div>";
                echo "<div class='caract'>" . $row["CARACTERISTICAS"] . "</div>";
                echo "<div class='preAniadi'>";
                    echo "<div class='precio'>" . $row["PRECIO"] . "€</div>";
                        ?>
                            <button class='botonaco' name='boton'  onclick='agregar(0, <?php echo $row["ID_ARTICULO"] ?>, "<?php echo $row["DESCRIPCION"] ?>", <?php echo $row["PRECIO"] ?>)'>Añadir al carrito</button>
                        <?php
 
                    echo "</div>";
                echo "</div>";
            }
        echo "</div>";
        echo "<div id='carroYTotal'>
            <div id='carro'></div>
            <div id='total'></div>
        </div>";
echo "</div>";
echo "<p id='parrafo'></p>";
?>

Función para añadir artículos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function agregar(cant, id, descr, precio){
	cant++;
	total+=precio;
 
	for(i=0;i<carrito.length;i++){
		if(carrito[i][1]==id){
			carrito[i][0]+=1;
			break;
		}
	}
 
	if(i==carrito.length){
		carrito.push([cant, id, descr, precio]);
	}
 
	document.getElementById("carro").innerHTML="";
 
	for(i=0; i<carrito.length;i++){
		document.getElementById('carro').innerHTML+=carrito[i][0] + " - " + carrito[i][1] + " - " + carrito[i][2] + "<button onclick='quitar("+i+")'>Quitar</button><br>";
    }
	document.getElementById("total").innerHTML="Total "+total.toFixed(2)+"€"+"<button id='btComprar' onclick='enviaDatos()'>Comprar</button>";
}

Función para quitar artículos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function quitar(i){
	if(carrito[i][0]>0){
		carrito[i][0]-=1;
	}
 
	total-=carrito[i][3];
 
	document.getElementById("carro").innerHTML="";
 
	for(j=0;j<carrito.length;j++){
		if(carrito[j][0]==0){
			carrito.splice(j, 1);
		}
		if(carrito.length==0){
			document.getElementById("total").innerHTML="";
		}else {
			document.getElementById("total").innerHTML="Total " + total.toFixed(2)+"€";
		}
 
		document.getElementById('carro').innerHTML+=carrito[j][0] + " - " + carrito[j][1] + " - " + carrito[j][2] + "<button onclick='quitar("+j+")'>Quitar</button><br>";
		}
	}

Hasta aquí todo bien. Bueno, supongo que el código será mejorable, pero funcionar funciona. Los artículos se van añadiendo al carrito y el array se crea correctamente.

El problema que me encuentro ahora es que no sé como enviar ese array, o mejor dicho, algunos de los elementos de ese array, (porque "descripción" y "características" no los necesito) a otra página php donde pueda pillarlos para meterlos a la tabla "compra", porque además, para más lío, esa tabla "compra", no solo lleva los elementos del array, sino que además, lleva otro campo que es el id del usuario. Este dato está guardado en una variable de sesión, (se puede ver en las primeras líneas $_SESSION["idusuario"];) o sea que, además del array, también tengo que llevarme lo que contiene esta variable de sesión, y la verdad, no tengo ni idea de como hacerlo. Así que, si alguien me ayudara y me aportara un poco de luz con esto, de verdad que le estaría enormemente agradecido. :D

Espero haberme explicado de manera que se me haya entendido algo.

Gracias a todos por vuestro tiempo y saludos desde Asturias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JR
Val: 5
Ha disminuido 1 puesto en AJAX (en relación al último mes)
Gráfica de AJAX

Como enviar varios tipos de datos con ajax

Publicado por JR (2 intervenciones) el 27/01/2019 12:50:44
Bueno, creo que ya he dado con una solución.

Primero, no hacía falta llevar la variable de sesión a javascript para enviarla con Ajax, sino que si en el php al que haces referencia en la función ajax, declaras dicha variable como variable de sesión, te la pilla perfectamente.

Así que, ya solo me faltaba enviar el array con los artículos, y lo hice así:


ajax

basta con guardar el array como un objeto como está marcado en rojo, y luego para leerlo en php, puedes referenciarlo por ejemplo así:

isset

Y ya: ya tienes el array guardado en la variable $articulos. No pensé que fuera tan fácil. :). Lo único, es que luego hay que tener cuidado, porque todos los elementos que hay en el array se convierten en string, o sea que hay que volver a convertirlo a int, float o a lo que sea. Y nada... igual hay otra forma de hacerlo más fácil, pero a mí esto me sirvió.

Gracias a todos y hasta la vista. :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar