Como educador, siempre he estado muy de acuerdo con la frase “El maestro no es la fuente del conocimiento, es un guía para obtenerlo”. Por ello, en lugar entrar en profundas explicaciones de lo que es AJAX, me voy a limitar a mostrarlo con ejemplos verbales y prácticos, pero para quienes gustan de arrasar la teoría, pueden encontrar la definición en http://es.wikipedia.org/wiki/AJAX. Lo que si vamos a hacer bien (espero) es orientar al que ya entiende algo de programación en PHP en el uso de esta tecnología para mejorar el funcionamiento y presentación de su producto final.
Para empezar, debemos comprender muy bien lo que NO es AJAX. Vamos a Google y hagamos una búsqueda normal, por ejemplo, escribamos la palabra ‘ajax’ en el cuadro de texto y analicemos que sucede al activar la búsqueda. Es obvio que nuestro dato es enviado a otro documento que se encarga de buscar los resultados y presentarlos en pantalla. Y digo obvio, porque se nota cuando la página de resultados carga. Es decir, que el documento A envía un dato al documento B frente a nuestros ojos. Esto es el procedimiento “normal” en Internet, y cada vez que se necesitan nuevos datos, el navegador realiza otra recarga.
El uso de AJAX, permite precisamente que se cargue información de otros documentos sin necesidad de recargar toda la página, y en algunas ocasiones, sin que el usuario lo note. Por ejemplo, si vamos a Yahoo! en español, y podremos observar en la parte derecha de la pantalla, un recuadro similar al de la imagen que presento aquí.Si movemos el puntero del Ratón por encima de los botones “Correo”, “Messenger” o “Tiempo”, podremos ver que nuevas secciones de contenido son cargadas en la misma página sin recargar todo el documento. Esto es posible claro, gracias al AJAX. Para mí, la forma más práctica y fácil de implementarlo es a través de la librería jQuery que provee más de una función para AJAX, por lo cual, podemos escoger la que mejor se ajuste a nuestras necesidades.
Terminada la teoría, pasemos a la práctica (me acabo de tomar una Red Bull). Esencialmente, para que AJAX funcione, necesita dos archivos: uno es el documento que el usuario ve en pantalla y envía una petición, mientras que el segundo es el que la recibe y emite la respuesta correspondiente. Veamos pues, como hacer un poco de magia, comenzando con un archivo llamado index.html:
<table border="1" width="600">
<tbody>
<tr>
<td colspan="3">Presione un botón</td>
</tr>
<tr>
<td width="100">
<input id="uno" type="button" value="Bio 1" />
</td>
<td id="resultado" colspan="2" rowspan="2">Esperando...</td>
</tr>
<tr>
<td>
<input id="dos" type="button" value="Bio 2" />
</td>
</tr>
</tbody>
</table>
Nada fuera lo común. Es un HTML normal, que incluye una tabla con un par de botones. A continuación utilizaremos unas cuantas línea de jQuery, para conseguir que al presionar el primer botón, aparezca dentro de la tabla, la biografía de Napoleón Bonaparte.
// el código se dispara al hacer clic sobre el botón que tiene id="uno"
$('#uno').click(function() {
// función AJAX que vía GET lee el contenido de napoleon.html y lo almacena en la variable 'respuesta'
$.get('napoleon.html', function(respuesta) {
// coloca el conteido de lavariable 'respuesta' dentro del td que tiene id="resultado"
$('#resultado').html(respuesta);
});
});
Eso es todo. Cinco líneas de las cuales solo tres son significativas, pues las dos restantes son para cerrar las llaves y paréntesis que hemos abierto. Analicemos que sucede entonces en esta porción de código.
- En la primera línea, con
$('#uno')hacemos referencia al elemento (etiqueta o tag) HTML que tenga en su atributo ID el valor ‘uno’. Luego declaramos que el código interno se ejecutará como respuesta al evento clic:.click(function(){ /* codigo interno */});. Una mayor referencia puede encontrarse en la Introducción a jQuery que también hemos publicado en este espacio. - La siguiente línea es nuestro AJAX., Básicamente tiene la estructura
$.get(url_receptor,callback);Lo primero que debemos comprender es que de todas las posibilidades, hemos optado por una de las más sencillas que es$.get(también hay otras como$.post,$.ajax,$.getJSONy alguna otra que pueden encontrar en la documentación de jQuery para AJAX). Los que programan saben que los datos pueden ser enviados de un documento a otro por los métodos GET y POST. Arbitrariamente hemos elegido la primera, repito por ser muy fácil de implementar y comprender. A continuación, dentro del parentesis, debemos colocar el valor del parámetro url_receptor, que para nuestro ejemplo será un archivo llamadonapoleon.html. En ese documento podemos escribir un poco de la biografía del recordado emperador francés, a manera de ejemplo. Debo mencionar que en archivo receptor, no es necesario colocar las etiquetashtml, head o bodypues ese documento nunca será leído directamente por el navegador. Únicamente incluiremos en los elementos que se colocan normalmente dentro debody. Finalmente, el segundo parámetro es el callback que no es más que la reacción de de nuestro código, a la respuesta enviada por el documento receptor (recomiendo leer la definición de callback en wikipedia). El callback por lo tanto queda comofunction(respuesta){ /* código interno */ }. Podemos observar que en el paréntesis defunction, agregamos la palabra ‘respuesta’, que es una variable que almacenará precisamente eso, lo que nos devuelva el documento receptor (napoleon.html) - La tercera línea, toma la variable
respuestaque almacena todo el código HTML contenido en napoleon.html (contenido que fue leído vía AJAX) y lo coloca dentro de la celda que tiene en su atributo ID el valor ‘resultado’. ¿Cómo? Pues muy sencillo: el atributo.html()sirve para reemplazar el contenido de un elemento HTML. Nuestro<td id="resultado">tenía originalmente el texto “Esperando…“, y ahora será reemplazado por lo que el AJAX fue a leer al archivonapoleon.html.
Listo, nuestro AJAX está listo. Como decía anteriormente, las últimas dos lineas nos sirven para cerrar las llaves y paréntesis que dejamos abiertas. En futuros artículos, mostraré la forma de trabajar con AJAX para realizar tareas que por otros medios tienden a complicarse un poco. Para practicar y observar como cambia el contenido con el segundo botón, repetiremos el procedimiento con otro archivo receptor que para el ejemplo, contiene la biografía de Michael Jackson. Al final, también pueden encontrar el enlace para descargar el ejemplo.
$('#dos').click(function(){
$.get('jackson.html',function(respuesta){
$('#resultado').html(respuesta);
});
});



#1 by Guillermo Jose Chavez [chepe263] on 10/Oct/2009
Muy buen ejemplo, te lo agradesco mucho. Eso de jquery me ahorro mucho porque el libro que estoy medio leyendo de ajax para dummies me lo hizo bastante dificil sobre todo cuando intento usar post (aun no he logrado que funcione)
Gracias, muy buen ‘post!’
chepe263
Guatemala
#2 by Attakinsky on 12/Oct/2009
gracias x el comentario, proximamente estaré ampliando ya con un poco de JSON, te invito a seguir leyendonos
#3 by orlando on 8/Ene/2010
grandioso post igualmente de amigable que la introduccion al ajax, gracias por ser tan pacientes con los que recien estamos empezando con lo del ajax
saludos desde Peru
#4 by promero on 8/Ene/2010
Una alternativa al “$.get” es la función $.ajax y más completa y permite hacer llamadas POST y GET, enviar variables , ejecutar algo ANTES (beforeSend) de hacer la llamada ajax , DESPUES de ejecutarse (complete) o si ocurre algún error , etc.
Especificación: http://docs.jquery.com/Ajax/jQuery.ajax
Saludos
promero
(twitter: http://twitter.com/13deseptiembre)
#5 by Attakinsky on 8/Ene/2010
es cierto… $.ajax es más completa pero también un poco (pero muy poco) más larga de implementar. Por eso decidí iniciar con $.get que es bastante “express”. De cualquier forma invito a los lectores a revisar la documentación oficial sobre $.get, $.getJSON, $.post y $.ajax
#6 by orlando on 20/Ene/2010
cierto tambien vi eso del $.ajax epero que puedas ilustrarnos mas sobre este tema, bueno saliendo un poco del tema, estoy haciendo un formulario de login que me encripta el pass antes de enviarlo al servidor me funciona en la primera si introduces el pass correcto pero si no te redirecciona a otra pagina mostrandote los errores del login y en ahi se vuelve a decir introduce el pass correcto pero en esta parte ya no me encripta el pass..
function encriptar(){
var texto=$(’#PassAccess’).val();
var encrip=hex_md5(texto); //encriptamos el valor
$(’#PassAccess’).val()=encrip;
}
y esto lo llamo en el evento onsubmit de mi formulario
qu estoy haciendo mal?
#7 by Attakinsky on 20/Ene/2010
Si entiendo bien, lo que esta sucediendo es que estás reemplazando el atributo value del input[type=password] con el password ya encriptado. Luego si tratas de hacer otro envío, lo lógico es que este encriptando el password ya encriptado, es decir encriptación de la encriptación.
Creo que el texto original deberias almacenarlo en algún lugar para que en caso de que falle la validación lo vuelves a colocar dentro del input.
#8 by orlando on 21/Ene/2010
claro entiendo eso
pero si hago eso cuando se active el evento submit de mi formulario dentro de ellos viajarian mi pass ecriptado y mi pass no encriptado.
como haria en este caso, estoy poniendo eso porque quiero que mi pass viaje pero cifrado.
#9 by Attakinsky on 21/Ene/2010
Vamos por partes: si lo hacés con el submit del formulario, entonces podés colocar la cantidad de datos que querrás en un input[type=hidden] fuera del formulario y de esa manera no son enviados, pero eso no es buena práctica pues en cierto modo estarían a la mano de cualquiera.
Te recomiendo que no hagás un submit con el formulario sino que enviés tus datos vía ajax para tener mayor control del proceso.
#10 by orlando on 23/Ene/2010
bueno si, lo que hice fue poner un campo hidden dentro de mi formulario y al momento de llamar a mi funcion de encriptacion le digo que le asigne a el la contraseña encriptada y que borre el valor del campo texto donde ingrese mi pass no ecriptado de esa forma viaja mi ID y mi pass encriptado y mi txtPass viaja vacio..
por ahora me va bien