Just Sherekan – Blog de Programación



Compartiendo conocimiento… intentando no reinventar la rueda…

Introducción a Ajax

Hoy inauguro la sección de AJAX con este artículo de introducción, en el cual vamos a ver en que consiste y como funciona esta reciente técnica de desarrollo web.

Que es y como funciona AJAX

AJAX es una técnica de de desarrollo web, por la cual se pueden crear aplicaciones web más rápidas y cómodas para el usuario. Por medio de esta técnica el cliente puede interactuar con el servidor de manera asincrónica, actualizando el contenido de las páginas, sin necesidad de volver a cargarlas.

Esta técnica, no solo es más cómoda y amigable para el usuario (ya que se asemeja a las aplicaciones de escritorio) sino que además, si es correctamente utilizada, puede llegar a ser más rápida, porque cada vez que se necesita actualizar un dato en una página, no es necesario recargarla nuevamente (solo se recarga la sección necesaria de la misma).

AJAX, no es una tecnología en si, sino que es un conjunto de tecnologías aplicadas de manera que logran el resultado explicado anteriormente (es decir, logran AJAX).

AJAX significa Asynchronous JavaScript And XML, y como su nombre lo indica, se trata de la combinación de JavaScript y XML. Básicamente, JavaScript hace una request al servidor, el mismo le devuelve una response en XML, y esta es procesada por JavaScript para actualizar los datos de la página, sin tener que recargarla por completo (logrando así una interacción asincrónica entre el servidor y el cliente).

NOTA: esto no es del todo cierto. Ya que se puede lograr AJAX, sin JavaScript y sin XML, reemplazando a JavaScript por otra tecnología client-side y a XML por JSON por ejemplo.

Para poder utilizar AJAX, es necesario conocer bien el protocolo HTTP y saber algo de JavaScript y XML. Pero si se quiere explotar AJAX al máximo, es necesario conocer otras cosas como XHTML, CSS, XSLT, DOM, JSON, etc. Pudiendo lograr cosas realmente impresionantes, como Google Maps o Gmail.

Para entender como funciona AJAX, primero vamos a hacer un sintético repaso de como funcionan las aplicaciones web “tradicionales”.

  1. El cliente le hace una HTTP request al servidor web (generalmente por medio de un browser).
  2. El servidor web, procesa la request y devuelve una HTTP response (que generalmente contiene contenido HTML para que el browser luego muestre al usuario).
  3. Por medio de esa página generalmente el ciclo vuelve a empezar, ya que el cliente puede hacer otras HTTP requests al servidor (a través de links presentes en la página, imágenes, etc.).

En fin, así es como funciona una aplicación web sin AJAX, ahora vamos ver como funcionan con AJAX.

Con AJAX, cuando el cliente hace una HTTP request al servidor, la hace por medio de JavaScript (lenguaje client-side). El servidor procesa la request y en vez de devolverle al cliente una página HTML, le devuelve un resultado en XML (no necesariamente, pero generalmente en XML), que es procesado por JavaScript, y este actualiza solo las secciones de la página necesarias (sin tener que cargar una nueva página). Repasemos entonces:

  1. El cliente por medio del browser produce algún evento. Este evento (como hacer click en un link por ejemplo) este es procesado por JavaScript (o alguna otra tecnología client-side) y le envía al servidor web una HTTP request.
  2. El servidor web, procesa la petición como siempre y le devuelve una response con el resultado en XML.
  3. Este resultado es procesado por JavaScript. Que recarga las secciones de la página necesarias para mostrar el resultado al usuario.
  4. Por medio de esta misma página, el ciclo comienza de nuevo. Sin haberse tenido que recargar la página.

Los pro y los contras de AJAX

Ventajas

  • Las páginas no se recargan constantemente.
  • El tiempo de espera puede ser menor.
  • Se pueden lograr aplicaciones web que sin AJAX definitivamente no se podrían hacer, como el conocido Google Maps por ejemplo.

Desventajas

  • Falta de integración con el botón “retroceder” de los browsers. Esto puede llegar a confundir al usuario.
  • Es necesario que el navegador soporte y tenga habilitado JavaScript. Pero no es una “desventaja”, ya que casi todos los navegadores modernos soportan JavaScript.
  • Al tener que ejecutar más código del lado del cliente, puede enlentecerse el rendimiento de la máquina del cliente. Por eso debe usarse AJAX con moderación.
  • Los usuarios no pueden obtener una URL a la cual poder referirse, en caso de querer recomendar la página, o volver a esa página en algún momento. Por eso debe saberse cuando usar AJAX y cuando no.
  • Más trabajo para los desarrolladores. Programar aplicaciones con AJAX puede llegar a ser tedioso a veces. Pero hay muchas herramientas y frameworks para facilitarnos el trabajo, ejemplos de ello son GWT.

Como podemos ver, tiene sus pro y sus contras como todo. Y se trata de saber cuando utilizarlo y cuando no.

Un ejemplo simple de AJAX

Bueno, basta de teoría, vamos a ver un ejemplo sencillo de como utilizar AJAX.

Vamos a crear una aplicación sencilla que va a hacer las veces de un “Hello World” para introducirnos en el uso de AJAX.

Por un lado, tenemos la página sayHello.php con este código PHP, que toma un dato enviado por GET, y genera una cadena de texto del tipo “Hola [dato]“.

[sourcecode language="php"]< ?php
echo "Hola " . $_GET['name'];
?>[/sourcecode]

Generalmente el resultado es devuelto en XML, pero en este caso, como se trata de un ejemplo bien sencillo, lo devolvemos como una simple cadena de texto.

Por otra parte, tenemos una página HTML sayHello.html, con un div, un text input y un botón, así:

[sourcecode language="html"]


Ingrese su nombre


[/sourcecode]

La idea, es que cuando el usuario apriete el botón, se envíe una HTTP request enviando la cadena de texto ingresada en el text input al código PHP anterior. El código PHP genere una cadena de texto para saludar al usuario por el nombre y se la devuelva como resultado al cliente, y este actualice el div mostrando dicho resultado.

Si quisieramos hacer las cosas fáciles y sin AJAX, mejor dicho, sin AJAX. Entonces para que el browser del usuario haga la HTTP request cuando el usuario apriete el botón, simplemente pondríamos los tags HTML del formulario (del text input y el botón) dentro de un tag HTML form, con un atributo action indicándole la URL a donde hacer la request.

Pero como queremos usar AJAX, esto no nos sirve! Necesitamos usar JavaScript como explicamos anteriormente, que es el que se va a encargar de hacer la HTTP request al servidor, para finalmente procesar la HTTP response que este devuelva y actualizar el div con el resultado (sin recargar la página). Así que hacemos lo siguiente:

Primero que nada creamos el objeto XMLHttpRequest, que es una clase JavaScript que nos provee de una interfaz para interactuar con el servidor, es decir hacer las requests, procesar las responses, etc…

[sourcecode language="js"]if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
} else {
xmlhttp = new ActiveXObject(“Microsoft.XMLHTTP”);
}[/sourcecode]

La condición que ven ahí, es porque testeamos primero si existe la clase XMLHttpRequest (ya que en el caso de Internet Explorer, la clase se llama ActiveXObject).

Una vez creado el objeto XMLHttpRequest, vamos a enviarle al servidor la HTTP request, enviándole como parámetro por GET el contenido de text input ingresado por el usuario. Para eso utilizamos los método open() y send() que ofrece XMLHttpRequest.

[sourcecode language="js"]xmlhttp.open(“GET”, “search.php?id=”+document.getElementById(“id”).value, true);
xmlhttp.send(null);[/sourcecode]

Vamos a setear el atributo onreadystatechange del objeto XMLHttpRequest con una función callback, que va a ser llamada cada vez que el estado de la HTTP request cambie. Esta función va a verificar el estado de la request, y si este es igual a 4 (es decir que ya se completó) entonces va a modificar el contenido del div con el resultado devuelto en la HTTP response.

[sourcecode language="js"]xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4) {
document.getElementById(“hello”).innerHTML = xmlhttp.responseText;
}
}
[/sourcecode]

Podríamos meter todo ese código JavaScript en una función y llamarla cuando se presione el botón, quedando sayHello.html así:

[sourcecode language="html"]

También pueden utilizar el método setRequestHeader() para setear los headers de la HTTP request, por ejemplo:

[sourcecode language=""]
setRequestHeader(“Content-Type”, “text/xml”);
[/sourcecode]

No voy a entrar en detalle, así que revisar algo de documentación sobre XMLHttpRequest no les va a hacer mal.


Ingrese su nombre


[/sourcecode]

Bueno, ahora viene la parte donde sobre-explico las cosas (pueden saltear esto). OK, veamos paso por paso lo que sucede:

  1. Creamos un objeto XMLHTTPRequest.
  2. Le seteamos el atributo onreadystatechange una función callback, que como ya dije antes, es la que se va a llamar cada vez que la request cambie su estado. En este caso, le pasamos una función que verifica que el estado de la request sea 4 (haya terminado de procesarse) y si esto es cierto, modifica el div con el texto devuelto por la HTTP response.
  3. Llamamos al método open() para indicarle al objeto XMLHttpRequest como hacer la request. Con el primer parámetro le indicamos el método de la request (en este caso GET), con el segundo la URL (en este caso la URL del script sayHello.php, pasándole como parámetro name el valor del input text name), y como tercer parámetro le indicamos que la request debe efectuarse de manera asincrónica (recuerden señores, que estamos usando AJAX).
  4. Finalmente llamamos al método send() para enviar la request. Si todo sale bien, debería hacerse la HTTP request al servidor web, y cuando este haya respondido, el objeto XMLHttpRequest va a llamar a la función callback guardada en el atributo onreadystatechange, que se va a encargar de modificar el contenido del div.

Bueno, eso fue todo por este artículo. En fin, algunos links interesantes que se pueden visitar para más información:

29 comentarios

29 comentarios

  1. mauricio ARGENTINA Abril 19th, 2008 7:51 pm

    sehr gut!

  2. pablo URUGUAY Mayo 7th, 2008 10:59 pm

    Excelente este blog!!!! ya lo tengo en los favoritos!!!; felicitaciones!!!!

  3. Sociedad en red » AJAX ARGENTINA Mayo 17th, 2008 3:22 pm

    [...] Introducción a AJAX (en español) [...]

  4. america MEXICO Mayo 27th, 2008 1:21 pm

    chido este blog!!!
    el programa como que esta muy largo… yo estudio programacion y en procesos de datos nos dejan mucho sobre esta la verdad si me sirvio espero ke tengan mas como javascript, java,CGI,etc. me cuesta trabajo encontrar las codificaciones espero y me puedan ayudar…
    saludos!!!

  5. Pablo ARGENTINA Junio 13th, 2008 2:39 pm

    Gracias, muy buena y clara tu explicación. Utilizo lo aprendido en el formulario de registro de usuarios de mi sitio.

  6. humberto MEXICO Junio 24th, 2008 8:58 pm

    excelente iniciativa sigue asi!

  7. Eduardo UNITED STATES Junio 27th, 2008 11:29 pm

    q va , muy padre tu bloq , me informo de una manera util.Gracias , espero estar en contacto

  8. Soker MEXICO Julio 13th, 2008 4:45 am

    No se si sea del todo correcto lo que dices en la sección de desventajas sobre el uso de AJAX cuando mencionas que “Falta de integración con el botón “retroceder” de los navegadores. ” y es que no estoy seguro como trabaje GMail pero el manejo de su contenido seguro utiliza AJAX para la carga de datos y avisarme que acaba de llegar un correo aun cuando yo tenia horas sin recargar esa pagina, sin embargo, de alguna manera logra que esto se vea reflejado en el cache del navegador y el usuario pueda apretar el botón retroceder sin que yo pierda la conversación con algun contacto con el “messenger” que esta ahi empotrado en la página , o incluso modificar la URL para que se pueda grabar la referencia de la página. No se si sepas algo sobre esto, sería bueno que si tienes idea lo postees por aca

    Saludos y buen blog

  9. ¿Qué es Ajax? « Codigo Unix UNITED STATES Julio 16th, 2008 10:56 pm

    [...] Como podemos ver, tiene sus pro y sus contras como todo. Y se trata de saber cuando utilizarlo y cuando no. Fuente: http://sherekan.com.ar/blog/2008/04/19/introduccion-a-ajax/ [...]

  10. Tony ARGENTINA Julio 31st, 2008 4:59 am

    barbaro el contenido!!

    mañana rindo el modulo de wab avanzado en una capacitacion!! esto me sirvio a full!

    saludos!

  11. Ezequiel MEXICO Octubre 5th, 2008 5:32 am

    Como siempre.. genial!! :)

    buen trabajo!! :)

    Solo un pequeño bug encontrado en el codigo de explicacion :)

    en el 4to parrafto de codigo:
    // document.getElementById(“id”).value, true); //
    dicho nombre del elemento “id” no existe en
    ninguna parte del codigo jeje :P!

    Espero que estes bien :)!!

    Los detalles en tu explicacion son geniales!!

    un abrazo :)

  12. arpia49 SPAIN Octubre 19th, 2008 7:25 am

    Hola, quería comentarte una curiosidad.

    En la línea 15 pone:

    xmlhttp.open(“GET”, “sayHello.php?namename =”+document.getElementById(“name”).value, true);

    Después del “php?” se repite name y la curiosidad es que si le das a ver el texto plano, sale bien.

    Un saludo.

  13. rooster SPAIN Octubre 21st, 2008 5:23 am

    Excelente articulo, breve, conciso y muy claro. Muchas gracias

  14. Victor CHILE Octubre 23rd, 2008 6:50 pm

    Estimada: muy buena tu informacion, pero tengo un problema que quizas puedas ayudarme a resolver. Tengo un programa PHP que tiene 12.000 lineas, y cuando ejecuto una validacion con XAJAX se pone extremadamente lento. La misma funcion, en un programa PHP de 1.000 lineas, funciona correctamente. ¿Se puede saber porque se comporta asi?

  15. Cheroka GERMANY Octubre 28th, 2008 6:53 am

    Que buen Blog. Esta entre mis favoritos. Estoy muy metido con CMS y trato de entender hasta ahora su funcionamiento. Tienes 17 anhos de verdad??? pero que tal capacidad escribir eh. Saludos desde Alemania

  16. Eduardo SPAIN Noviembre 4th, 2008 10:22 am

    Muy buen articulo, lo pondre en practica. Me ha gustado mucho tu blog, es increible que con solo 17 años domines tan bien estas tecnologias y redactes tan bien los articulos del blog.

    En tu biografia mencionas “innecesaria secundaria”, hazme caso y terminala que el dia de mañana te vendra de maravilla. Yo tengo unos 12 años de experiencia con ordenadores y por culpa de no tener titulos y bachillerato ahora no puedo encontrar trabajo en ninguna empresa porque desgraciadamente solo miran los “papeles”. Ahora me he decidido a montar algunos proyectos por internet y por eso estaba viendo este articulo, porque no sabia que era ajax y me interesaba porque lo habia visto en algun que otro chat con php.

    Saludos desde España.

  17. Luis E. Afastos MEXICO Diciembre 5th, 2008 10:58 pm

    Hola ya me esa gustando este blog se ve q tviste una muy buena iniciativa al crearlo, si yo la hubiera tenido atu edad hoy seria otra cosa de mi vida jaja :-D bueno a lo que voy es que para complementar tu articulo que ya de por si es muy bueno yo recomiendo que cuando alguien se quiera iniciar en AJAX primero tenga un nivel por lo menos medio de javascript, asi que a leer mis amigos que el cerebro no come aire, despues les digo que la funcion primordial de AJAX es crear aplicaciones web q emulen las aplicaciones de escritorio en otros lenguajes finalizo y me despido

  18. Josdar PERU Febrero 3rd, 2009 12:49 am

    Saludos desde Perulandia, muy bueno el blog, me has aclarado algunos enredos que tenia en la cabeza. Y bueno, no sabia de la herramienta GWT, excelente, gracias. Te amo.

  19. Josdar PERU Febrero 3rd, 2009 12:51 am

    Y ya hice clic varias veces a tus anuncios Google. Suerte en todo.

  20. enrique MEXICO Febrero 27th, 2009 4:47 am

    Hola, muy buen blog, me gustó mucho tu explicación de AJAX.

  21. Manowar SPAIN Marzo 2nd, 2009 8:47 am

    Un saludo de Barcelona.

    Esta muy bien el articulo. Sabes explicarte con claridad y esta muy bien construido con los ejemplos de codigo intercalados.
    Felicidades por el blog.

    Saludos!

    “Born Metal !!!
    Die Metal !!!”

  22. Daniela PERU Marzo 10th, 2009 3:17 am

    Hola, de atemano te agradezco la ayuda que me puedas dar, mira quisiera trabajar con ajax, que ide me recomiendas?

    Muy agradecida

    Zhenia

  23. wil COLOMBIA Marzo 19th, 2009 1:41 pm

    muy buena redaccion y explicacion del ejemplo.
    gracias por tomarte el tiempo y hacerlo , me ha servido.!

  24. Introducción a Ajax « Nomeaclaro UNITED STATES Junio 30th, 2009 9:37 am

    [...] Just Sherekan. « Bordes redondeados en la Web [...]

  25. Primer ejemplo de Ajax « Nomeaclaro UNITED STATES Junio 30th, 2009 12:07 pm

    [...] Just Sherekan. « Introducción [...]

  26. Pablo ARGENTINA Agosto 20th, 2009 3:05 pm

    Muy bueno… agradecido

  27. Carlos SPAIN Noviembre 17th, 2009 11:44 am

    ¡Sos una máquina! he leído en algún comentario que considerás innecesaria la secundaria (el ‘insti’ como le dicen por España). ¡Más te vale que lo termines y te me metas en una carrera, sino vuelo 12000 km hasta donde estés y te meto una paliza, jaja! Noo che, va con onda, en realidad demostrás una capacidad enorme y aunque a veces la educación formal aburre es el camino verdadero.
    Por favor seguí con los artículos, sos muy didáctica y da gusto leerte. Un abrazo desde Madrid

  28. Xel MEXICO Noviembre 20th, 2009 9:03 pm

    Hola, solo para comentar que EXT-js http://www.extjs.com/deploy/dev/examples/samples.html es un framework ajax que es muy poderoso, con componentes muy al estilo web 2.0. Cuando dices que hay Ajax sin javascript , creo que no es del todo cierto, ya que si no hay javascript simplemente no es ajax, tal vez te refieras al concepto de web 2.0 en donde por ejempo ajax puede ser remplazado por flex.

    saludos y muy buen blog!!!

  29. manuel alvarez VENEZUELA Diciembre 2nd, 2009 3:58 pm

    excelente explicación tenia una idea abstracta sobre ajax pero con tu muy buen redactado artículo, mis dudas quedaron respondidas, gracias de todo corazón y deseo tengas una feliz navidad

    manuel álvarez
    universidad ezequiel zamora (unellez)
    guanare, venezuela

Dejá una respuesta

Mexico