Retroceder   Foros del Web > Programación para sitios web > AJAX

Respuesta
 
Herramientas Desplegado
Antiguo 11-abr-2008, 06:37   #1 (permalink)
iontxu ha deshabilitado el karma
 
Avatar de iontxu
 
Fecha de Ingreso: marzo-2008
Mensajes: 34
Pregunta pasar un array a una función de Xajax

Hola, estoy intentando pasar un array que contiene varios strings a una función Xajax de la siguiente manera:
Código PHP:
echo "<script type='text/javascript'>";
echo    
"xajax_mostrar('".$num."','".$rutafoto."','".$cont."');";
echo 
"</script>"
Donde las variables $num y $cont son numéricas de tipo integer, y $rutafoto es el array del que hablo.
Al pasarlas a la función, las recojo cómo:
Código PHP:
function mostrar($num,$rutafoto,$cont){
...

Veo que las variables numéricas me las pasa a tipo string, pero las vuelvo a convertir fácilmente a tipo integer con:
Código PHP:
settype($num,'int');
settype($cont,'int'); 
El problema viene cuando quiero reconvertir que la variable $rutafoto, que me la ha pasado a tipo string y le ha puesto como contenido "Array".

¿Cómo puedo hacer para pasar un array a una función de Xajax sin perder el contenido?
iontxu está desconectado   Responder Citando
Antiguo 11-abr-2008, 07:18   #2 (permalink)
mgusdl tiene algunos puntos positivos de karma
 
Avatar de mgusdl
 
Fecha de Ingreso: abril-2007
Ubicación: Málaga, España
Mensajes: 154
Enviar un mensaje por Skype™ a mgusdl
Re: pasar un array a una función de Xajax

Buenas
Dado que se trata de lenguajes diferentes y de hecho lo que haces es generar código en JS desde PHP no puedes pasar una variable de tipo array de uno a otro así sin más. De hecho en PHP si haces
Código PHP:
<?php
$variable 
= array(0=>"valor"1=>"valor");
echo 
$variable;
?>
Lo que te dará por pantalla será "array", y esto es lo que te devuelve.

Yo lo que veo es que tendrás que pasar cada valor del array como un parámetro
Código PHP:
<?php
$variable 
= array(0=>"valor"1=>"valor");
$cadena '';
for (
$i=0$i<count($variable$i++) $cadena .= "'".$variable[$i]."',";
$cadena substr($cadena0strlen($cadena)-1)); // Esto es para quitar la ultima ,  añadida
echo "<script type=\"text/javascript\">\n"
echo 
"xajax_mostrar('{$num}', '{$cont}', {$cadena});\n";
echo 
"</script>\n";
?>
Al no tratarse de arrays podemos prescindir de meter las variables entre {}, pero la fuerza de la costumbre...
También podemos prescindir de meter las variables entre comillas simples si se trata de valores numéricos.

Última edición por mgusdl; 11-abr-2008 a las 07:21. Razón: agregar detalles
mgusdl está desconectado   Responder Citando
Antiguo 11-abr-2008, 07:28   #3 (permalink)
mgusdl tiene algunos puntos positivos de karma
 
Avatar de mgusdl
 
Fecha de Ingreso: abril-2007
Ubicación: Málaga, España
Mensajes: 154
Enviar un mensaje por Skype™ a mgusdl
Re: pasar un array a una función de Xajax

Para lo de los tipos de variables también puedes usar la funcion intval
Código PHP:
$var intval($var); 
Ya que PHP gestiona los tipos de variable dinámicamente (lo cual se agradece respecto al lenguaje C)
No suelo usar la función settype, además intval devuelve 0 si tiene algún valor no numérico, lo cual es una ventaja si quieres desechar valores tipo numérico y carácter mezclados
mgusdl está desconectado   Responder Citando
Antiguo 11-abr-2008, 08:18   #4 (permalink)
iontxu ha deshabilitado el karma
 
Avatar de iontxu
 
Fecha de Ingreso: marzo-2008
Mensajes: 34
Pregunta Re: pasar un array a una función de Xajax

La solución de pasar cada valor del array como parámetro a la función, en un principio no me sirve porque el array se llena de valores obtenidos de una base de datos y por tanto cada vez que se cargue la página puede ser distinto.
Se me había ocurrido nombrarlo como variable global, pero no veo el modo de que me lo detecte. De hecho, cuando dentro de la función de Xajax escribo:
Código PHP:
global $rutafoto;
gettype($rutafoto); 
la función gettype me dice que el tipo de $rutafoto es NULL, lo que supongo que quiere decir "vacío", no?
¿A alguien se le ocurre otra solución?
Muchas gracias por las respuestas.
iontxu está desconectado   Responder Citando
Antiguo 11-abr-2008, 09:58   #5 (permalink)
mgusdl tiene algunos puntos positivos de karma
 
Avatar de mgusdl
 
Fecha de Ingreso: abril-2007
Ubicación: Málaga, España
Mensajes: 154
Enviar un mensaje por Skype™ a mgusdl
Re: pasar un array a una función de Xajax

Y convertir el array de PHP en un array en JS??
Código PHP:
<?
echo "<script type=\"text/javascript\">";
echo 
"var rutafoto = Array();";
for (
$i=0$i<count($rutafoto); $i++) echo "rutafoto[] = '{$rutafoto[$i]}';
echo    "
xajax_mostrar('$num'rutafoto'$cont');n";
echo "
</script>";
?>
mgusdl está desconectado   Responder Citando
Antiguo 11-abr-2008, 10:20   #6 (permalink)
iontxu ha deshabilitado el karma
 
Avatar de iontxu
 
Fecha de Ingreso: marzo-2008
Mensajes: 34
Pregunta Re: pasar un array a una función de Xajax

Cita:
Iniciado por mgusdl Ver Mensaje
Y convertir el array de PHP en un array en JS??
Código PHP:
echo    "xajax_mostrar('$num', rutafoto, '$cont');\n"
¿Qué quiere decir la "n" final de la línea?
¿Es el salto de línea?
Un saludo y gracias por la idea, la estoy probando.
iontxu está desconectado   Responder Citando
Antiguo 14-abr-2008, 00:51   #7 (permalink)
mgusdl tiene algunos puntos positivos de karma
 
Avatar de mgusdl
 
Fecha de Ingreso: abril-2007
Ubicación: Málaga, España
Mensajes: 154
Enviar un mensaje por Skype™ a mgusdl
Re: pasar un array a una función de Xajax

Cita:
Iniciado por iontxu Ver Mensaje
¿Qué quiere decir la "n" final de la línea?
¿Es el salto de línea?
Un saludo y gracias por la idea, la estoy probando.
Efectivamente \n dentro de una cadena entre " es un salto de línea. A efectos de visualización no hay ningún cambio, pero cuando ves el código fuente queda más ordenado y es más sencillo buscar errores.
Si además usas tabulación \t queda además tabulado.
mgusdl está desconectado   Responder Citando
Respuesta
No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 16:08.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93