Hola amigos.
¿Hay algún equivalente a las variables de sesion de php para javascript?
Gracias
| |||
Respuesta: Variables de sesion Pero te pongo un ejemplo. En la web de un supermercado hay 3 paginas, una para carne, otra para pescado y otra para no perecedero. Tu te metes en la de carne y vas pinchando ne los porductos que quieras añadir, pulsas en añadir, y a la derecha se te van cargando en la cesta. Si cambias de página y vas a la de pescado, como haces para uqe se conseven los productos que has elegido en carne? A la fuerza las tienes que pasar por la url? Porque crear una cookie para eso me parece algo engorroso (nunca he creado cookies y siempre he tenido la sensacion de que son intrusivas y peligrosas, aunque quizás es por ignorancia). Tu para un caso como este que me recomendarias,¿ cookies o pasar por la url? |
| ||||
Respuesta: Variables de sesion Es una mezcla entre PHP y JS. La actualización de los productos elegidos se realiza mediante AJAX, se conserva mediante variables de sesión PHP y los cambios en el DOM (en la página) se realizan mediante Javascript. Cuando la página se recarga es el mismo PHP el que hace las modificaciones en el HTML, y cuando se actualiza las modificaciones se realizan por JS. No hay nada incompatible. Y los Cookies sólo se usan como método de identificación del usuario. |
| |||
Respuesta: Variables de sesion PHP y Javascript los domino y entiendo las diferencias de uno y otro. Se uqe PHP trabaja desde el servidor y Javascript desde el cliente. ¿Ajax seria el nexo de ambos? Es muy dificil de aprender a manejar? |
| ||||
Respuesta: Variables de sesion Cita: Si entiendes el funcionamiento de JS y PHP al completo, es muy muy sencillo entender AJAX, ya que AJAX no es más que una implementación natural de una petición GET o POST estándar pero con la diferencia de que esta no se realiza cuando se carga el navegador sino cuando el programador lo desee.Pero para eso has de entender qué es una petición GET o POST y cuándo se producen. |
| |||
Respuesta: Variables de sesion ¿Puedes recomendarme algún buen manual? Si no entiendo mal, lo que tengo que hacer es: Con jquery añadir cosas al carro en una misma página. Con cada producto añadido, crear una variable de sesión de php Y para poder pasar las variables de sesioón de php en otra página a javascript para volverlas a mostar, usar ajax? |
| ||||
Respuesta: Variables de sesion Cita: 1) Con AJAX enviar el nuevo producto añadido/eliminado al script PHP
Iniciado por Gothgauss ¿Puedes recomendarme algún buen manual? Si no entiendo mal, lo que tengo que hacer es: Con jquery añadir cosas al carro en una misma página. Con cada producto añadido, crear una variable de sesión de php Y para poder pasar las variables de sesioón de php en otra página a javascript para volverlas a mostar, usar ajax? 2) Desde el script php añadir (o eliminar) al array el nuevo producto* 3) CUando esto sea satisfactorio mediante jQuery modificar la página como sea efectivo. *En vez de crear una variable por cada producto es más lógico usar un array con varios productos y eliminar o poner elementos según se desee. Si usas jquery el único manual es la documentación de jQuery, ya que para el caso no necesitas más. Un saludo. |
| |||
Respuesta: Variables de sesion Vale, pero no termino de entender una cosa. Cojo todos los productos que han seleccionado y los mando por post/get al script php. Ahi creo un array que los almacene (o varios separandolos por frescos, congelados, perecederos...) y luego recojo los valores de la variable de sesion php con jquery, del modo: var producto = <?echo $_SESSION['perecedero'] ?> y los vuelvo a mostrar por pantalla. Sería así? |
| ||||
Respuesta: Variables de sesion Si haces echo a un array simplemente no funcionará, print_r daría una salida algo compleja de parsear luego. Para eso usa json_encode($_SESSION['perecederos']); lo codificará como un objeto JS para lo cual luego sólo tendrás que usar en jQuery array = $.parseJSON(data); para parsear los datos. Es más sencillo, luego puedes usar $.each(array, function(i,v){ }) para hacer un bucle y procesar cada variable de la forma que se te antoje. Consulta la documentación de jquery para cada una de estas funciones, verás lo sencillo que es. |
| |||
Respuesta: Variables de sesion Buff Vas muchisimo más rápido de lo que mi mente es capaz de asimilar. Ahora mismo estaba leyendo la documentación sobre ajax de jquery y había pensado en hacer lo siguiente: Para enviar llas variables a sesion.php había pensado en poner:
Código:
lo que no se es como crear el archivo sesion.php, es decir, no termnino de ver el modo de interactuar en sesion.php. $.ajax({ type: "POST", url: "some.php", data: { producto1: "Carne", producto2: "Pescado" } }) Tendría que poner $_SESSION['producto1'] = ¿algún codigo ajax? Voy a seguir mirando e investigar sobre lo que has puesto |
| ||||
Respuesta: Variables de sesion Tienes que plantear mejor lo que vas a enviar y el formato.... si vas a usar un mismo Script PHP para quitar y poner productos necesitas sólo dos variables... producto = el id del producto action = lo que vas a hacer agregar/eliminar entonces, lo primero es reflejar eso en la petición (0 para eliminar y 1 para agregar)
Código Javascript:
Ver original O sea, suponiendo en el código anterior que producto fuera 256 y action 0, se enviaría esta petición some.php?producto=256&action=0 Pues ya tienes la primera parte hecha, en apenas 30 segundos, tardas más en escribir que en escribir el código. Parte 2: Al Script le llegan estas dos variables GET $_GET['producto'] | 256 $_GET['action'] | 0 Una vez con estas dos variables, haz un if, y según sea el valor de $_GET['action'] rediriges a agregarproducto() o a eliminarproducto() |
| |||
Respuesta: Variables de sesion La verdad es que me encanta como me lo explicas, porque realmente lo estás haciendo fácil. Por lo que estoy viendo, ajax no es que sea muy dificil de usar. Ahora en mi fichero sesion.php tengo que tener algo para ir recogiendo las variables enviads por ajax y meterlas dentro del array. Por lo que necesito crear una variable de sesion para los productos entonces con el if, para ver si lo agrego o lo quito:
Código:
y al final vuelvo a leer la variable de productos en sesion.php con ajax para que me muestre cuales son realmente los productos que tengo en la lista de la compra y hago con jquery que se muestren en la lista. $action = $_GET['action']; $producto = $_GET['producto']; if('action'==1){ $_SESSION['PERECEDEROS'] = $producto; } |
| ||||
Respuesta: Variables de sesion Cita: Para agregar un nuevo elemento a un array ya creado previamente basta con hacer
Iniciado por Gothgauss La verdad es que me encanta como me lo explicas, porque realmente lo estás haciendo fácil. Por lo que estoy viendo, ajax no es que sea muy dificil de usar. Ahora en mi fichero sesion.php tengo que tener algo para ir recogiendo las variables enviads por ajax y meterlas dentro del array. Por lo que necesito crear una variable de sesion para los productos ¿$_SESSION['PERECEDEROS'] = $_GET['nombre'];? $_SESSION['PERECEDEROS'][] = $variablelaquesea; el valor al que iguales se introducirá al final del array. O sea ["producto1","producto2","producto3","producto4 "] si la variable es "producto5, con [] ["producto1","producto2","producto3","producto4 ","producto5"] |
| |||
Respuesta: Variables de sesion He creado un ejemplo a pequeña escala para ir entendiendo todo pero no me funciona: He puesto un input text y un button y una variable de sesion (inicialmente vacia), para que al meter un valor en el text y al pinchar el button, me envie mediante ajax por get a sesion.php la variable. En sesion.php la recojo mediante una variable de sesión, y en teoría debería imprimir la variable, pero no imprime nada. Aquí el código: index.php:
Código:
y ahora el codigo de sesion.php<?session_start();?> <head> <script type="text/javascript" src="../js/jquery.js"></script> <script> $(document).ready(function(){ $('#texto').val(); $('#boton').click(function(){ $.ajax({ type:'GET', url:'sesion.php', data:{"producto":$('#texto').val()} }); }); }); </script> </head> <body> <input type="text" id="texto" /><input type="button" id="boton" value="dar" /><br /> <?echo "Y aqui la variable de sesion:".$_SESSION['producto'];?> </body>
Código:
EDITO : ME ESTÁ FUNCIONANDO PERO NECESITO REFRESCAR LA PÁGINA, poruqe estoy mostrandolo con php y no recogiendo los datos con ajax para mostrarlos mediante jquery. SE ENVIAR DATOS CON AJAX PERO NO RECOGERLOS... :S <?session_start(); $_SESSION['producto'] = $_GET['producto']; ?> Última edición por Gothgauss; 13/06/2012 a las 16:14 |
| ||||
Respuesta: Variables de sesion Cita: borro lo anterior
Iniciado por Gothgauss He creado un ejemplo a pequeña escala para ir entendiendo todo pero no me funciona: He puesto un input text y un button y una variable de sesion (inicialmente vacia), para que al meter un valor en el text y al pinchar el button, me envie mediante ajax por get a sesion.php la variable. En sesion.php la recojo mediante una variable de sesión, y en teoría debería imprimir la variable, pero no imprime nada. Aquí el código: index.php:
Código:
y ahora el codigo de sesion.php<?session_start();?> <head> <script type="text/javascript" src="../js/jquery.js"></script> <script> $(document).ready(function(){ $('#texto').val(); $('#boton').click(function(){ $.ajax({ type:'GET', url:'sesion.php', data:{"producto":$('#texto').val()} }); }); }); </script> </head> <body> <input type="text" id="texto" /><input type="button" id="boton" value="dar" /><br /> <?echo "Y aqui la variable de sesion:".$_SESSION['producto'];?> </body>
Código:
EDITO : ME ESTÁ FUNCIONANDO PERO NECESITO REFRESCAR LA PÁGINA, poruqe estoy mostrandolo con php y no recogiendo los datos con ajax para mostrarlos mediante jquery. SE ENVIAR DATOS CON AJAX PERO NO RECOGERLOS... :S<?session_start(); $_SESSION['producto'] = $_GET['producto']; ?> edito: ... para eso existe el método success de jquery para AJAX... muéstrame la función php que añade un producto Si tu envias un dato mediante AJAX al motor PHP no hará nada más, necesitas dar una repsuesta desde ese mismo PHP.... si haces esto echo "respuesta desde PHP" a AJAX le llegará el siguiente dato respuesta desde PHP Necesitas por tanto dar una salida con cada una de las variables para luego escribirlas en la página. Última edición por dontexplain; 13/06/2012 a las 16:25 |
| |||
Respuesta: Variables de sesion Eso es, es decir, lo que necesito es con ajax poder recoger los nuevos datos de la variable de sesion y mostrarlos con jquery en la pagina. Creo que para coger los datos de sesion.php tengo que usar algo así
Código:
pero no se que meter entre los corchetes. $.getJSON("sesion.php", function(data){ } |
| ||||
Respuesta: Variables de sesion Cita: getJSON hace una $.ajax y luego $.parseJSON, pero creo que para tu caso es más sencillo que uses directamente $.parseJSON
Iniciado por Gothgauss Eso es, es decir, lo que necesito es con ajax poder recoger los nuevos datos de la variable de sesion y mostrarlos con jquery en la pagina. Creo que para coger los datos de sesion.php tengo que usar algo así
Código:
pero no se que meter entre los corchetes.$.getJSON("sesion.php", function(data){ } $.ajax({ blablabla, blablabla, blablabla, success: function(data){ datos = data; datos = $.parseJSON(datos); } }) De ese modo datos será un array JS con los datos parseados. Pero para que parseJSON tenga sentido necesitas obviamente que la respuesta tenga formato de JSON, del lado de PHP hacer echo json_encode($_SESSION['perecederos']); Un saludo. |
| |||
Respuesta: Variables de sesion Esto sigue fallandome. EN sesion.php
Código:
y en el script.php lo siguiente:<?session_start(); $_SESSION['producto'] = $_GET['producto']; echo json_encode($_SESSION['producto']); ?>
Código:
Ahora mismo ya no se donde falla :( <?session_start();?> <head> <script type="text/javascript" src="../js/jquery.js"></script> <script> $(document).ready(function(){ $('#texto').val(); $('#boton').click(function(){ $.ajax({ type:'GET', url:'sesion.php', data:{"producto":$('#texto').val()}, success: function(data){ datos = data; datos = $.parseJSON(datos); } }); $('#mostrardatos').text(datos); }); }); </script> </head> <body> <input type="text" id="texto" /><input type="button" id="boton" value="dar" /> <span id="mostrardatos"></span> </body> |
| ||||
Respuesta: Variables de sesion cuando se usa parseJSON la función devuelve un array o una variable. El método text inserta texto, pero primero debes ver qué salida genera el json_encode(). Abre el script manual y envia la variable GET manualmente, o sea, abre el script desde el navegador. sesion.php?producto=variable sustituye variable por la variable que sea y pega aquí la salida que da Por otro lado, si no especificas la no asincronidad de AJAX lo que sucede es que las sentencias más abajo se ejecutan independientemente de que la petición AJAX se haya resuelto, por lo tanto, puede suceder que al hacer $('#mostrardatos').text(datos), la variable datos aún no exista, de modo que cualquier cosa en que vayas a usar la variable introdúcela dentro de success, ya que success se ejecutará justo cuando la petición AJAX tenga respuesta y esta no sea errónea. |
| |||
Respuesta: Variables de sesion Vale, el fallo está en el php. Me sale error en la línea 3, es decir, el json Fatal error: Call to undefined function json_encode() in C:\AppServ\www\web\definitiva\sesion.php on line 3 edito: HE quitado json_encode() y ahora el ejemplo funciona, pero pinchando dos veces en el boton. Si sólo le doy una no sale nada. He probado metiendo $('#mostrardatos').text(datos); dentro de success, pero haciendo esto deja de funcionar |
| ||||
Respuesta: Variables de sesion Has de tener una versión antigua de PHP, json_encode() es una función de PHP 5 >= 5.2.0. O actualizas a una versión de PHP mas reciente o usas http://www.boutell.com/scripts/jsonwrapper.tar.gz ya sabes, usas un require e introduces jsonwrapper.php, luego llamas a la función mediante json_encode(). |
| |||
Respuesta: Variables de sesion Acabo de actualizar php. Ahora si que me sale al entrar directamente en sesion.php?producto=carne el echo "carne" Pero el ejemplo, si entro en script.php e introduzco en el textarea carne y le doy al boton, no me sale nada, aunque estoy seguro que es por lo que me comentaste de que .text es para texto y no para arrays. Voy a buscar documentacion de como mostrar arrays en jquery. |
| ||||
Respuesta: Variables de sesion Cita: UN echo imprime una variable, no un array convencional. Si sólo tienes un registro te irá bien de momento, pero cuando tengas 2 o más ya tendrás problemas. Entonces usarás print_r o alguna otra artimaña para devolver todos los valores (como bucles foreach, while o for). Como se que manejar datos en JSON es muy muy sencillo te aconsejé lo de json_encode().
Iniciado por Gothgauss Acabo de actualizar php. Ahora si que me sale al entrar directamente en sesion.php?producto=carne el echo "carne" Pero el ejemplo, si entro en script.php e introduzco en el textarea carne y le doy al boton, no me sale nada, aunque estoy seguro que es por lo que me comentaste de que .text es para texto y no para arrays. Voy a buscar documentacion de como mostrar arrays en jquery. Por ejemplo, si tienes el array array("carne","pescado","frutas","verduras"), json_encode lo convertiría a Cita: Luego, parseJSON convertiría esa salida (que es un STRING o una cadena) en un array JS de la siguiente forma:["carne","pescado","frutas","verduras"] Cita: Y por tanto["carne","pescado","frutas","verduras"] array[0] devolvería carne array[1] devolvería pescado Por eso te recomiendo lo del JSON. |
| |||
Respuesta: Variables de sesion El código de php queda así:
Código:
y el script.php<?session_start(); $_SESSION['producto'][] = $_GET['producto']; echo json_encode($_SESSION['producto']); ?>
Código:
pero no me da ningún resultado :( <?session_start();?> <head> <script type="text/javascript" src="../js/jquery.js"></script> <script> $(document).ready(function(){ $('#boton').click(function(){ $.ajax({ type:'GET', url:'sesion.php', data:{"producto":$('#texto').val()}, success: function(data){ datos = data; datos = $.parseJSON(data); $.each(datos, function(i,j){ $('#mostrardatos').text(value); }); } }); }); }); </script> </head> <body> <input type="text" id="texto" /><input type="button" id="boton" value="dar" /> <span id="mostrardatos"></span> </body> |
| ||||
Respuesta: Variables de sesion Cita: $('#mostrardatos').text(value);
Iniciado por Gothgauss El código de php queda así:
Código:
y el script.php<?session_start(); $_SESSION['producto'][] = $_GET['producto']; echo json_encode($_SESSION['producto']); ?>
Código:
pero no me da ningún resultado :(<?session_start();?> <head> <script type="text/javascript" src="../js/jquery.js"></script> <script> $(document).ready(function(){ $('#boton').click(function(){ $.ajax({ type:'GET', url:'sesion.php', data:{"producto":$('#texto').val()}, success: function(data){ datos = data; datos = $.parseJSON(data); $.each(datos, function(i,j){ $('#mostrardatos').text(value); }) } }); }); }); </script> </head> <body> <input type="text" id="texto" /><input type="button" id="boton" value="dar" /> <span id="mostrardatos"></span> </body> ese value de donde viene, si estás haciendo un bucle, el valor es la segunda variable del argumento, o sea, la j $('#mostrardatos').html(j); |
| |||
Respuesta: Variables de sesion Me has contestado juisto cuanto estaba editando. Al acceder nuevamente yo direcatamnete a la pagina sesion.php?producto=carne me da ahora el error de que no he declarado bien la variable de sesion como array. Yo la he declarado así $_SESSION['producto'][]= $_GET['producto']; lo cual creo que es correcto. VOy a hacer el cambio del .html(value) que se me escapó de la documentación jquery cambiarlo. |
Etiquetas: |