martes, abril 18, 2006

Traducción de Artículo de Ajax X

Especificando un metodo de rellamada
En este punto has hecho bastante poco que se sienta como nuevo, revolucionario o asincronico. Concedido, esa pequeña clave "true" en el método open() establece una peticion asincronica. Pero ademas de eso, este codigo se parece a la programacion con servlets Java y JSPs, PHP o Pearl. Entonces, ¿cuál es el gran secreto de Ajax y Web 2.0? EL secreto da vueltas sobre una simple propiedad de XMLHttpRequest llamada onreadystatechange.
Primero asegurate de que entiendas el proceso que creaste en este código (revisa el listing 10 si lo necesitas). Una petición es seteada y luego hecha. Además, a causa de que esta es una peticion sincrónica, el método Javascript (getCustomerInfo() en el ejemplo) no va a esperar al servidor. Entonces el código va a continuar; en este caso, esto significa que el método va a salir y el control va a volver al formulario. Los usuarios pueden continuar ingresando información y la aplicación no va a esperar al servidor.
Esto crea una interesante pregunta, sin embargo: ¿qué pasa cuando el servidor termina de procesar la petición?. La respuesta, el menos tal como el código esta hasta ahora, es nada!. Obviamente, eso no es bueno, por eso el servidor necesita tener algún tipo de instrucción sobre que hacer cuando termine de procesar la peticion enviada a traves del XMLHttpRequest.
Aca es donde la propiedad onreadystatechange entra en juego. Esta propiedad te permite especificar un método de rellamada. Una rellamada permite al servidor (puedes adivinar) rellamar al código de tu página web.Le da un grado de control al servidor, tambien; cuando el servidor termina una petición, se fija en el objeto XMLHttpRequest y especificamente en la propiedad onreadystatechange. Cualquier método espsificado por esa propiedad es inbocado. Es una rellamada por que el servidor inicia una llamada de vuelta a la pagina Web --sin importar lo que este pasando en la pagina misma. Por ejemplo, podría llamar a este metodo mientras el usuario está sentado en su silla, sin tcar el teclado; sinembargo, tambien podría llamarlo cuando el usuario está tipeando, miviendo el mouse, moviendo la ventana, presionando un botón... no importa que esté haciendo el usuario.
Acá es realmente cuando la asincronicidad entra en juego: el usuario opera el formulario en un nibvel mientras en otro nivel, el servidor responde una petición y luego dispara el método de rellamada indicado por la propiedad onreadystatechange. Entonces necesitas especificar ese netodo en tu código como se muestra en el listing 11.
Listing 11. Establecer un metodo de rellamada
function getCustomerInfo(){
var phone = document.getElemntById("phone").value;
var url = "/cgi-local/lookupCustomer.php?phone="+escape(phone);
request.open("GET", url, true);
request.onreadystatechange = updatePage;
request.send(null);
}

Poner especial atencion a donde en el código se fija esta propiedad --es antes de de la llamada send(). Tenes que fijar esta propiedad antes de que la petición sea enviada, así el servidor puede buscar la prpiedad cuando termine de responder una petición. Todo lo que nos queda es codificar el updatePage() que es el foco de la última sección de este articulo.

Etiquetas: