Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Frameworks JS (http://www.forosdelweb.com/f127/)
-   -   pasar un array a una función de Xajax (http://www.forosdelweb.com/f127/pasar-array-funcion-xajax-574903/)

iontxu 11/04/2008 06:37

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?

mgusdl 11/04/2008 07:18

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.

mgusdl 11/04/2008 07:28

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

iontxu 11/04/2008 08:18

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.

mgusdl 11/04/2008 09:58

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>";
?>


iontxu 11/04/2008 10:20

Re: pasar un array a una función de Xajax
 
Cita:

Iniciado por mgusdl (Mensaje 2359622)
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.

mgusdl 14/04/2008 00:51

Re: pasar un array a una función de Xajax
 
Cita:

Iniciado por iontxu (Mensaje 2359668)
¿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.


La zona horaria es GMT -6. Ahora son las 00:46.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.