Ver Mensaje Individual
  #7 (permalink)  
Antiguo 26/06/2006, 22:49
califa010
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 18 años, 3 meses
Puntos: 5
Buenas,

me parece que lo más prolijo, escalable y simple (tal vez no al principio pero sí una vez que tengas un poco de práctica) es usar xml para pasar los datos. Desde php en vez de pasar variables, generás un xml. Desde AS, lo cargás y leés con el objeto XML.

Por ejemplo, podrías usar un xml con una estructura como ésta:

Código HTML:
<alumnos>
    <alumno id_alumno="123" cantidad="10" />
    <alumno id_alumno="155" cantidad="5" />
    <alumno id_alumno="178" cantidad="6" />
</alumnos> 
Generar ese xml desde php es bastante simple:

Código:
<?
$xml = "<?xml version='1.0' encoding='iso-8859-1' ?>";
$xml .= "<alumnos>";
$query = "select * from alumnos where categoria=$curso";
$res = mysql_query($query,$link);
while ($myrow = mysql_fetch_array($res)) {
      
      $var1=$myrow['id_alumno'];
      $var2=$myrow['cantidad'];
      $xml .= "<alumno id_alumno='$var1' cantidad='$var2' />;
}
$xml .= "</alumnos>";
echo $xml; // fijate que no haya otra salida del php (echo's o print's)
?>
Para leerlo desde AS:

Código:
System.useCodepage = true;
var alumnos = new LoadVars();
alumnos.curso = "curso";

var arrAlumnos = []; 
// este array va a contener alumnos, que a su vez van a estar representados cada uno por un array con los 
// datos que le mandes a través del xml

var alumnos_xml = new XML();
alumnos_xml.ignoreWhite = true;
alumnos_xml.onLoad = function (ok) {
	if (ok) {
		procesarDatos(this);
	} else {
		trace("error de carga");
	}
};

alumnos.sendAndLoad("consultar.php",alumnos_xml,"POST" ); // la respuesta la recibís en el obj xml alumnos_xml

function procesarDatos(ref_xml) {
	var nodoRoot = ref_xml.firstChild;
	var cantAlumnos = nodoRoot.childNodes.length;
	var nodoAlumno;
	var idAlumno;
	var cantidad;
	var i;
	/**
	recorrés cada nodoAlumno, obtenés los datos (id_alumno y cantidad, en este caso) y los guardás en un nuevo
	array dentro del array arrAlumnos
	*/
	for (i=0;i<cantAlumnos;i++) {
		// buscás el nodo correspondiente y obtenés los atributos id_alumno y cantidad
		nodoAlumno = nodoRoot.childNodes[i]; 	
		idAlumno = nodoAlumno.attributes.id_alumno;  
		cantidad = nodoAlumno.attributes.cantidad;
		// los guardás en el array de cada alumno, que es un elemento del array "principal" arrAlumnos
		arrAlumnos[i] = [idAlumno,cantidad];    
	}
	/**
	traces:
	*/
	trace(arrAlumnos[0][0]); // muestra del primer alumno [0], el id_alumno[0] 				--> 123
	trace(arrAlumnos[1][0]); // muestra del segundo alumnos [1], el id_alumno[0];			--> 155
	trace(arrAlumnos[2][1]); // muestra del tercer alumno [2], el parametro cantidad [1]	-->   6
}
En este caso paso los datos a un array por si te resulta más cómodo, pero en realidad podría obviarse y trabajarse directamente sobre el objeto XML (aunque al principio es más fácil con arrays, hasta que le tomes la mano al objeto xml).

Suerte
Califa