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