Foros del Web » Programando para Internet » Javascript »

pasar variable de php a js

Estas en el tema de pasar variable de php a js en el foro de Javascript en Foros del Web. Después de un largo tiempo leyendo no llego a ninguna conclusión... Tengo un array creado en php, y quiero manejarlo en js. En principio había ...
  #1 (permalink)  
Antiguo 31/03/2006, 04:56
 
Fecha de Ingreso: mayo-2005
Mensajes: 510
Antigüedad: 18 años, 11 meses
Puntos: 1
Pregunta pasar variable de php a js

Después de un largo tiempo leyendo no llego a ninguna conclusión... Tengo un array creado en php, y quiero manejarlo en js. En principio había creado una función js q la llamo desde php, y por ahí, como parámetro de la función, pasaba el array, pero me salían errores y he comprobado q no se puede pasar así un array... La explicación no la sé, pero yo no puedo hacerlo, o por lo menos el valor del array no me lo recoge, así q no. Así q quería saber si es cierto q no se peude pasar de esa manera un array, y si es así, si puedo recoger desde js ese array de otra manera...
He encontrado un código en el q pone q la variable se peude recoger con la siguiente línea de código:
var varjs="'.$variable_php.'";
Y recargando la página, pero no quiero tener q recargar la página para recoger la variable. Tal vez al querer pasar un array las cosas sean distintas a si quisiera pasar una simple cadena. Si no encuentro otra solución deberé meter todo en una cadena e ir separando trozo por trozo al recibirla... Pero espero q haya otra solución mejor!
Muchas gracias
  #2 (permalink)  
Antiguo 31/03/2006, 05:12
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Hola Andrea

tal vez lo más sencillo sea que definas el array como global en js y a la función js le pases el nombre del array y dentro de la función lo pases por un eval()

igual, podrías poner la parte de código que tienes hasta ahora?
  #3 (permalink)  
Antiguo 31/03/2006, 05:15
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Corrijo: ni siquiera es necesario pasarlo por un eval()

mira este ejemplo tonto

Código:
<script type="text/javascript">
var pepe = new Array("a","b","c")
function hola(p){
	alert(p)
}
hola(pepe)
</script>
  #4 (permalink)  
Antiguo 31/03/2006, 06:39
 
Fecha de Ingreso: mayo-2005
Mensajes: 510
Antigüedad: 18 años, 11 meses
Puntos: 1
Creo q no me he explicado bien... y si no, no he entendido tu respuesta...
Tengo este código en php:

Código PHP:
echo "<input type=\"button\" class=\"input3\"name=\"introFechas\" value=\"Sesiones ...\" onClick=\"javascript:devuelveNSesiones('no', $arrayfhea)\">"
El vector $arrayfhea contiene cierta información, ya q si hago un print_r del mismo me muestra valores... Por lo q ese vector está relleno con la info q deseo. Ahora, lo paso a js mediante la llamada "devuelveNSesiones('no', $arrayfhea)", y ahí ya no me recoge el valor.

En js hago lo siguiente:

Código:
function devuelveNSesiones(mostrar, arrayfhea) {
var array = arrayfhea;
alert(arrayfhea.lenght);
}
Y me muestra "undefined". Por lo q no le llega el valor del array. Por eso quiero saber cómo puedo hacer llegar ese vector a javascript, en el código q me has dejado no aparece nada de php, por tanto no sé cómo debo pasarlo...

Muchas gracias!
  #5 (permalink)  
Antiguo 31/03/2006, 09:26
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Muchas de nadas,

una cosa, dices que tienes definido un vector en $arrayfhea ... ¿seguro que es un vector en php?

en la línea en donde escribes el button mediante echo tal y como lo tienes debería escribir la palabra Array.

Déjame ver la línea que le llega al navegador. Es decir, esta línea
Código:
echo "<input type=\"button\" class=\"input3\"name=\"introFechas\" value=\"Sesiones ...\" onClick=\"javascript:devuelveNSesiones('no', $arrayfhea)\">";
cómo le llega al navegador (desde ver código fuente)
  #6 (permalink)  
Antiguo 31/03/2006, 09:27
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 11 meses
Puntos: 834
No podés pasarlo como vector a javascript. Primero tenés que convertirlo en string, por ejemplo con <?php echo implode('","',$vector);?> y luego usarlo, si querés, como vector en js., por ejemplo:
<script>
$vec_js=["<?php echo implode('","',$vector);?>"]
</script>
  #7 (permalink)  
Antiguo 31/03/2006, 09:28
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Caramba, un choque

Hola Panino, tiempo sin verte
  #8 (permalink)  
Antiguo 31/03/2006, 09:30
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 11 meses
Puntos: 834
Hola, tunait!!! Un placer chocar con vos, je!!!
  #9 (permalink)  
Antiguo 31/03/2006, 09:33
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola:

Yo he convertido un array php a javascript volcando los valores:

var arrayJs = new Array();
<?php
for ($i = 0, $total = count($arrayPhp); $i < $total; $i ++)
echo <<< volcado
arrayJs[$i] = "$arrayPhp[$i]";

volcado;
?>

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #10 (permalink)  
Antiguo 31/03/2006, 09:38
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 11 meses
Puntos: 834
Hola, Caricatos, es cierto, se puede hacer iterando, pero con implode es más rápido y menos código.
  #11 (permalink)  
Antiguo 31/03/2006, 09:40
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Cita:
Iniciado por caricatos
Yo he convertido un array php a javascript volcando los valores:

var arrayJs = new Array();
<?php
for ($i = 0, $total = count($arrayPhp); $i < $total; $i ++)
echo <<< volcado
arrayJs[$i] = "$arrayPhp[$i]";

volcado;
?>
Hola Pepe

El tema es antes saber si la variable $arrayfhea es un array en php o si es un único string de elementos separados por comas
  #12 (permalink)  
Antiguo 31/03/2006, 09:44
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 11 meses
Puntos: 834
Para eso bastaría con:
<script>
$vec_js=[<?php is_array($vector){echo '"'.implode('","',$vector).'"';}else{echo $vector;}?>]
</script>
  #13 (permalink)  
Antiguo 31/03/2006, 09:46
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Cita:
Iniciado por Panino5001
Hola, Caricatos, es cierto, se puede hacer iterando, pero con implode es más rápido y menos código.
Jelou again

El tema es que al escribir para js el resutado del implode lo haría sin entrecomillar cada uno de sus elementos ¿no?

Yo cuando necesito pasar un array php a js hago más o menos lo que caricatos, uso un foreach para escribir el array en el documento agregando las comillas a cada uno, pero claro, tratándolo como un array en php
  #14 (permalink)  
Antiguo 31/03/2006, 09:49
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 11 meses
Puntos: 834
No, tunait (yo enseñándote a vos luego de todo lo que me enseñaste!!!), el implode es como el join de javascript, lo que hace es unir los elementos del vector con la cadena que le indiques, y yo le indiqué ",". Yluego agrego la de los extremos para completar el formato correctamente
  #15 (permalink)  
Antiguo 31/03/2006, 09:53
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Cita:
Iniciado por Panino5001
Para eso bastaría con:
<script>
$vec_js=[<?php is_array($vector){echo '"'.implode('","',$vector).'"';}else{echo $vector;}?>]
</script>
jeje este lo escribiste mientras escribía el anterior.

Va perfecto
  #16 (permalink)  
Antiguo 31/03/2006, 09:58
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Cita:
Iniciado por Panino5001
No, tunait (yo enseñándote a vos luego de todo lo que me enseñaste!!!),
uf, y lo que me queda por aprender

Un detalle nomás ...

$vec_js=[<? ...etc.

El $ no le gusta a js como nombre de variable (ya se que ha sido un lapsus teclil, que acaba uno medio pelotudo con tanta ensalada de lenguajes)
  #17 (permalink)  
Antiguo 31/03/2006, 10:01
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 11 meses
Puntos: 834
Es cierto! Se me coló el $. Secuelas del choque con mi ídola!
  #18 (permalink)  
Antiguo 31/03/2006, 10:27
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola:

Sobre lo que tengo una pequeña duda es cuando el array es muy largo no interesará añadir saltos de línea...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #19 (permalink)  
Antiguo 31/03/2006, 10:31
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 11 meses
Puntos: 834
Sólo quedará más prolijo, pero a los efectos de funcionamiento (me ha pasado) es lo mismo.
  #20 (permalink)  
Antiguo 31/03/2006, 12:56
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 4 meses
Puntos: 1
'Che Panino eres una bomba !

No se me hubiera ocurrido, con lo que me gustan los códigos compactos.
__________________
"Di no al Internet Explorer" -Proverbio Chino-
  #21 (permalink)  
Antiguo 31/03/2006, 16:28
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Cita:
Iniciado por tunait
Hola Pepe

El tema es antes saber si la variable $arrayfhea es un array en php o si es un único string de elementos separados por comas
Hola Helena (perdona mi mala educación )

Pues supongo que es cuestión de prolijidad...

La verdad es que supuse que se trataba de un array sin pensar en las alternativas.

Lo bueno de ser "prolijo" es que si hay errores (y durante las pruebas suelen producirse) se descubren más rápidamente.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #22 (permalink)  
Antiguo 01/04/2006, 07:35
 
Fecha de Ingreso: mayo-2005
Mensajes: 510
Antigüedad: 18 años, 11 meses
Puntos: 1
Muchas gracias a los 3 por vuestras sabias aportaciones!!
El vecto q deseo pasar sí q es un array, lo he comprado de la manera q me indicó tunnait y he encontrado la siuiente línea:

Código HTML:
<input type="button" class="input3"name="introFechas" value="Ver sesiones" onClick="javascript:devuelveNSesiones('si', Array)"> 
He probado el tema del implode, pero no consigo q funcione. He quitado el vector como parámetro de la función, ya q creo q ahora no es necesario...
En mi código PHP he escrito la siguiente línea:

Código PHP:
echo implode('","'$arrayfhea); 
$arrayfhea es el vector q deseo pasar, y es el mismo q anteriormente pasaba como parámetro de la función y el navegador detecta como Array. Y en la llamada a la función JS, recogo la variable así:

Código:
arrayfhea = ["<?php echo implode('","',$arrayfhea);?>"];
Eso es lo q entendí... Pero está claro q está mal entendido. En la pantalla de la aplicación se me escribe la palabra "Array", q supongo q viene del "echo implode...", pero no entiendo exactamente qué es lo q hace, por lo q no sé quñe debo cambiar. Tal vez, en vez de poner el echo, debo meter "implode('","', $arrayfhea);" eso en una variable... No sé Y al pulsar el botón q llama a la función JS, me saca el siguiente mensaje:

Cita:
arrayfhea = ["<br />
<b>Warning</b>: implode() [<a href='function.implode'>function.implode</a>]: Bad arguments. in <b>C:\Servidor\web\GestionEventos\logica\infoEvent oPhp.php</b> on line <b>4</b><br />
"];
q ahí es donde está el códio JS con el q quiero recuperar el array. ¿Sabéis q estoy haciendo mal? Ah, estoy pensando... Cada posición del array q quiero pasar contiene otro array, así q tal vez eso dé un error. Igual debería hacer un bucle y llamar a implode con cada uno de los vectores q están dentro del vector q quiero pasar (uis, q lío!!), y luego ya hacer un implode de ese propio vector... Ais, la verdad es q no sé cómo resolverlo.
  #23 (permalink)  
Antiguo 01/04/2006, 08:52
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola:

Vamos mejorando... deberías explicar mejor tu "situación" desde el principio...

Por lo que dices tendrías que aplicar una función recursiva... pero si no hay más anidamiento te bastaría algo híbrido entre lo que te hemos puesto.

Te recomiendo empezar con mi propuesta y aplicar la de Panino5001/tunait (anímate a probar)

Por cierto... creo que es más adecuado el mensaje en el foro php.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #24 (permalink)  
Antiguo 01/04/2006, 16:44
Avatar de gachon  
Fecha de Ingreso: septiembre-2004
Ubicación: En Google
Mensajes: 462
Antigüedad: 19 años, 7 meses
Puntos: 3
hola muy buenas como puedo meter esta simple variable $_antesdeenviar de "php", en javascript,
muestro codigo;
Código PHP:
<script languaje="javascript">
 function validar(form)
{
var error = "<?php echo '$_antesdeenviar';?>\n\n";//aquie esta la variable $_antesdeenviar que la quiero mostrar cuando se produca el evento en javascript
var a = ""

    if (form.Provincia.value == "") { a += " Provincia\n"; }
    if (form.Poblacion.value == "") { a += " Poblacion\n"; }
    if (form.Zona.value == "") { a += " Zona\n"; }
    if (form.Tipo.value == "") { a += " Inmueble\n"; }
    if (form.Operacion.value == "") { a += " Operacion\n"; }

    if (a != "") { alert(error + a); return true; }

form.submit()

}
esa variable es para el idiomas para que muestre la advertencia en ingles o español, segun es que idioma esta la pagina
muchas gracias y haber si podeis ayudarme
  #25 (permalink)  
Antiguo 01/04/2006, 17:59
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 4 meses
Puntos: 1
Código PHP:
var error = <?php echo '"'.$_antesdeenviar.'"';?>
O bien:

Código PHP:
var error = <?='"'.$_antesdeenviar.'"'?>

//con la sintaxis abreviada
__________________
"Di no al Internet Explorer" -Proverbio Chino-
  #26 (permalink)  
Antiguo 07/08/2006, 11:02
Avatar de chepi  
Fecha de Ingreso: abril-2005
Ubicación: Posadas - Misiones
Mensajes: 116
Antigüedad: 19 años
Puntos: 1
hola chicos, que interesante estuvo esta conversación. Yo estoy necesitando pasar el resultado de una consulta en php a un array de javascript, y por lo que lei creo que estoy en el post correcto, pero como no entiendo nada de javascript estoy bastante perdida

En qué lugar tendria que hacer la consulta? dentro del <script> </script>?

Muchas gracias por la ayuda.
Nota: esto es para llenar un <select> con los datos de la consulta, porque estoy probando un script que es para cargar listas dependientes, el único tema es que en el ejemplo usan solamente datos "estáticos" y yo necesito obtenerlos de la BD.
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 04:19.