jueves, 20 de noviembre de 2008

Seguimos jugando con Ajax

El segundo incoveniente que tuve con Ajax en mis escarceos con esta nueva tecnología para mí me lo dió la maldita función xmlHttp.onreadystatechange.

Lo que yo quería hacer es bien sencillo, pasarle a la función a la que se le asigna un valor para que el resultado de la consulta Ajax me lo escribiese en un objeto u otro. A si que, raudo y veloz escribí el código así:


xmlHttp.onreadystatechange=stateChanged(tipoBusqueda)


Pero claro, como no todo siempre es tan bonito, al ejecutarlo me daba un error de tipos en esta línea que me volvió loco. El problema es que con esta sintaxis se está asignando directamente al evento onreadystatechange el valor "stateChanged(tipoBusqueda") y eso nos da el error de tipo. Según estuve leyendo, este evento sólo admite la asignación de una función (sin variables). ¿Como? ¿Que no puedo pasarle argumentos a la función? Tranquilo. Si se puede. Exist eun pequeño truquillo para asignarle una función a este evento pasándole argumentos, sólo que hay que utilizar una sintaxis un pelín rebuscada:


xmlHttp.onreadystatechange=function () { stateChanged(tipoBusqueda); }


Es decir, lo que se hace aquí es asignarle una función, definiéndola en la misma asignación. ¡Pero funciona! Luego sólo necesitamos que nuestra función stateChanged modifique unos objetos y otros en función de ese parámetro que se le pasa:


function stateChanged(tipoBusqueda)
{
if (xmlHttp.readyState==4)
{
switch(tipoBusqueda)
{
case 0:
document.getElementById("obj1").innerHTML=xmlHttp.responseText;
break;
case 1:
document.getElementById("obj2").innerHTML=xmlHttp.responseText;
break;
}

}
}


Espero que esto te sirva de ayuda en el caso de que necesites pasarle argumentos a la función que se le asigna a la consulta Ajax.

No hay comentarios: