Pablasso

Una embarradita de Ajax

April 23, 2007

En estas épocas de tanto framework, es muy común simplemente bajarnos una librería y empezar a utilizar sus funciones sin preocuparnos por lo que pasa detrás. Pero es importante aprender a hacerlo desde cero, no es tan complicado y te ayuda a resolver problemas cuando llega la hora.

Introducción

La definición de Ajax según la Wikipedia:

“..es una técnica de desarrollo web para crear aplicaciones interactivas. Éstas se ejecutan en el cliente, es decir, en el navegador del usuario, y mantiene comunicación asíncrona con el servidor en segundo plano.”

Esta técnica no parte de nada nuevo, sino que se basa en las tecnologías existentes, como Javascript, DOM y sobre todo el objeto XMLHttpRequest, quien es el que se encarga de realizar las transacciones asíncronas y que el usuario no tenga que esperar por cada petición al servidor.

“..De esta forma es posible realizar cambios sobre la misma página sin necesidad de recargarla. Esto significa aumentar la interactividad, velocidad y usabilidad en la misma.”

Un ejemplo básico de una aplicación Ajax**

Este ejemplo tiene 3 campos que se utilizan para la selección de un alumno, al hacer click sobre cualquiera de los campos, se manda llamar a un script de PHP, que conectandose a una base de datos devuelve la información del individuo seleccionado sin necesidad de recargar la página.

Es un ejemplo simple y que no tiene ninguna clase de comprobaciones con el fin de que sea sencillo de entender.

Se utilizan 2 archivos que realizan todo el trabajo:

Archivo: intro.html

Un html que contiene nuestras 2 funciones básicas de javascript, con la primera función obtenerAlumno(), recibimos los datos provenientes del usuario y mandamos llamar al script de PHP que se encargara de sacar la información de la base de datos.

La segunda función callbackAlumnos(), se ejecuta solamente cuando haya recibido la señal del que archivo de PHP terminó su ejecución. En este caso tomamos los datos que el script de PHP nos regresó y se los asignamos al div resultados.

    <html>
    <head>
    <title>Introduccion a Ajax</title>
    
    <script languague="Javascript">
    
    /* esta funcion se encarga de iniciar la peticion asincrona */
    function obtenerAlumno(id)
    {
    	
    	/* 
    	* tratamos de crear un objeto XMLHttpRequest, 
    	* si esto falla usamos ActiveX que es el caso de Internet Explorer 
    	*/
    	try {
    		xmlhttp = window.XMLHttpRequest?new XMLHttpRequest(): new ActiveXObject("Microsoft.XMLHTTP");
    	}
    	catch (e) {
    		alert("oh noes! no se que navegador estas utilizando!");
    	}
    
    	/* cuando la peticion al script de php se complete, llamaremos a la funcion callbackAlumo */
    	xmlhttp.onreadystatechange = callbackAlumno;
    	/* abrimos y mandamos una peticion al script de php, mandandole la id del alumno por get en la url */
    	xmlhttp.open("GET", 'regresa_datos.php?id=' + id);
    	xmlhttp.send(null);
    }
    
    /* esta function se ejecuta cuando el script de php termina su labor */
    function callbackAlumno() {
    	/* finalmente buscamos el div con id resultados y lo llenamos con la respuesta del script php */
    	document.getElementById("resultados").innerHTML = xmlhttp.responseText;
    }
    
    </script>
    
    </head>
    <body>
    <!-- unos simples inputs que mandan la id del resgistro que queremos --!>
    <input type="radio" onclick="obtenerAlumno('1')"></input>Primer Alumno
    <input type="radio" onclick="obtenerAlumno('2')"></input>Segundo Alumno
    <input type="radio" onclick="obtenerAlumno('3')"></input>Tercer Alumno
    <p>
    <div id="resultados"></div>
    <p>
    
    </body>
    <html>

Archivo: regresa_datos.php

Este script de PHP recibe la id de algún alumno, lo busca en la base de datos e imprime su información en pantalla.

    $id_alumno =  $_REQUEST['id'];
    
    mysql_connect('localhost', 'usuario', 'password');
    mysql_select_db('base_datos');
    
    $resultado = mysql_query("select nombre, domicilio, email from alumnos where id={$id_alumno}");
    
    $fila = mysql_fetch_object($resultado);
    
    echo "Yo soy {$fila->nombre}, y vivo en {$fila->domicilio}. Mandame un mail a {$fila->email}!";

Si son demasiado ociosos para crear la tabla de ejemplo, aquí les dejo la que utilize:

    drop table if exists alumnos;
    create table alumnos (
    id int not null auto_increment,
    nombre varchar(50) not null,
    codigo varchar(10) not null,
    domicilio varchar(50) not null,
    email varchar(30) not null,
    nacimiento date not null,
    primary key (id)
    );
    
    insert into alumnos (nombre, codigo, domicilio, email, nacimiento) values('Fulanito Perez', 'FP12345678', 'Av. Fulanita #123', 'fulanito@perez.com', '1983-03-01');
    insert into alumnos (nombre, codigo, domicilio, email, nacimiento) values('Homero Simpson', 'HS12345678', 'Av. Siempre Viva #123', 'homer@aol.com', '1954-01-02');
    insert into alumnos (nombre, codigo, domicilio, email, nacimiento) values('Don Benito', 'DJ12345678', 'Don Benito Street #123', 'elbeni@benilandia.com', '1944-10-30');

Conclusión

Puedes hacer tu aplicación web mucho mas interactiva con el usuario con tan solo unas líneas mas de código. A pesar de que Ajax ya tiene algunos años que está aquí todavía muchos desarrolladores temen que sea muy complicado, ¡es tiempo de cambiar eso!


Juan Pablo OrtizWritten by Juan Pablo Ortiz who lives and works in Guadalajara, Mexico. You should follow him on Twitter