Archivo de la categoría ‘Ajax’

AJAX - XMLHttpRequest

Martes, 8 de Mayo de 2007

XMLHttpRequest, es un API que puede invocarse desde JavaScript, y otros lenguajes de script incluidos en un navegador web, que se usa para transferir y manipular datos XML hacia y desde el navegador web, estableciéndose un canal de conexión independiente entre el lado del cliente de la página web y el servidor.
Los datos devueltos por la llamada a XMLHttpRequest serán, por lo general, obtenidos desde bases de datos en el servidor. La llamada puede devolver datos en XML o en cualquier otro formato textual como JSON o incluso texto plano.

Estos son algunos de los métodos y propiedades que se pueden utilizar con este objeto:

MÉTODOS
abort(): Detiene la petición actual
getAllResponseHeaders(): Devuelve todas las cabeceras de la respuesta como pares de etiqueta y valores en una cadena
getResponseHeader(”headerLabel”): Devuelve el valor de una cabecera determinada
open(”method”, “URL”[, asyncFlag[, "userName"[, "password"]]]): Asigna la URL de destino, el método y otros parámetros opcionales de una petición pendiente
send(content): Envía la petición, opcionalmente se puede enviar una cadena de texto o un objeto DOM
setRequestHeader(”label”, “value”): Asigna un valor al par label/value para la cabecera enviada.

PROPIEDADES
onreadystatechange: El manejador del evento llamado en cada cambio de estado del objeto
readyState: Entero que indica el estado del objeto (0 = sin inicializar, 1 =cargando, 2 = fin de la carga, 3 = actualizando la información recibida, 4 = Operación completada)
responseText: Cadena de texto con los datos devueltos por el servidor
responseXML: Objeto DOM devuelto por el servidor
status: Código numérico devuelto por el servidor, ejemplos: 404 si la página no se encuentra,200 si todo ha ido bien, etc.
statusText: Mensaje que acompaña al código de estado.

Para empezar con un ejemplo, lo primero que necesitamos es crear una nueva
variable y asignarle una instancia del objeto XMLHttpRequest.

<script language="javascript" type="text/javascript">
   var peticion = false;
   try {
      peticion = new XMLHttpRequest();
   } catch (trymicrosoft) {
      try {
          peticion = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (othermicrosoft) {
         try {
            peticion = new ActiveXObject("Microsoft.XMLHTTP");
         } catch (failed) {
            peticion = false;
         }
      }
   }
   if (!peticion)
      alert("ERROR AL INICIALIZAR!");
</script>

Los pasos seguidos son:
1. Crear una nueva variable llamada peticion y asignarle el valor false. Usamos false para significar que el objeto XMLHttpRequest todavía no está creado.

2. Intentamos crear el objeto XMLHttpRequest.

3. Si esto falla (catch (trymicrosoft))

4. Intentamos crear un objeto compatible para los navegadores modernos de (Msxml2.XMLHTTP).

5. Si la cosa sigue fallando (catch (othermicrosoft)), intentamos crear un objeto compatible con los navegadores antiguos de Microsoft (Microsoft.XMLHTTP).

6. Si todo esto falla (catch (failed)), nos aseguramos de que la variable peticion está a false.

7. Comprobamos si la variable peticion esta a false y si es así sacamos un mensaje de alert con el problema (alert(”ERROR AL INICIALIZAR!”))

Si probamos el código veremos que no pasa nada: señal de que todo ha ido bien.

Una vez que se ha creado una instancia podemos empezar a trabajar con XMLHttpRequest. Por ejemplo, vamos a realizar una función para ver el funcionamiento del método getAllResponseHeaders().

function Cabecera() {
   peticion.open("HEAD", "index.php",true);
   peticion.onreadystatechange=function() {
      if (peticion.readyState==4) {
         alert(peticion.getAllResponseHeaders())
      }
    }
    peticion.send(null)
}

1.- Creamos una funcion cabecera en la que lo primero que hacemos es abrir la instancia peticion que previamente habíamos creado (peticion.open(”HEAD”, “index.php”,true)).
- HEAD especifica el método HTTP usado para abrir la conexión. Puede ser GET, POST, o HEAD únicamente.
- index.php especifica la url. Se puede especificar la url de un modo relativo o absoluto pero debido a un modelo de seguridad del objeto XMLHttpRequest, éste solo puede hacer peticiones sobre el mismo dominio donde se está ejecutando.
- true determina que la operación es asíncrona (lo más habitual). Si es true asignamos un callback a la propiedad onreadystatechange para determinar cuando la operación se ha completado.

2.- Si la operación se ha completado (peticion.readyState==4), lanzamos un alert con las cabeceras (peticion.getAllResponseHeaders())

3.- No enviamos nada al servidor peticion.send(null)

Un ejemplo completo que nos mostrase las cabeceras mediante XMLHttpRequest sería:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <script language="javascript" type="text/javascript">
      var peticion = false;
      try {
      peticion = new XMLHttpRequest();
      } catch (trymicrosoft) {
      try {
      peticion = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (othermicrosoft) {
      try {
      peticion = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (failed) {
      peticion = false;
      }
      }
    }
    if (!peticion)
    alert("ERROR AL INICIALIZAR!");

    function Cabecera() {
    peticion.open("HEAD", "lanzadera.html",true);
    peticion.onreadystatechange=function() {
    if (peticion.readyState==4) {
              alert(peticion.getAllResponseHeaders())
    }
    }
              peticion.send(null)
    }
    </script>
    </head>
    <body>
    <a href="javascript:Cabecera()">
    Mostrar cabeceras </a>
    </body>
    </html>

AJAX - “Asynchronous JavaScript And XML”

Martes, 8 de Mayo de 2007

Según wikipedia AJAX 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. 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.

AJAX es una combinación de tres tecnologías ya existentes:

  • XHTML (o HTML) y hojas de estilos en cascada (CSS) para el diseño que acompaña a la información.
  • Document Object Model (DOM) accedido con un lenguaje de scripting por parte del usuario, especialmente implementaciones ECMAScript como JavaScript y JScript, para mostrar e interactuar dinámicamente con la información presentada.
  • El objeto XMLHttpRequest para intercambiar datos asincrónicamente con el servidor web. En algunos frameworks y en algunas situaciones concretas, se usa un objeto iframe en lugar del XMLHttpRequest para realizar dichos intercambios.

XML es el formato usado comúnmente para la transferencia de vuelta al servidor, aunque cualquier formato puede funcionar, incluyendo HTML preformateado, texto plano, JSON y hasta EBML.

¿Porque es tan interesante AJAX? Porque en realidad AJAX no es una tecnología, sino la unión de varias tecnologías que juntas pueden lograr cosas realmente impresionantes como GoogleMaps, Gmail el Outlook Web Access (ref) o algunas otras aplicaciones muy conocidas.

Jesse James Garret publicó en un artículo en Inglés excelente que vale la pena traducir por completo:

Ajax: Un Nuevo acercamiento a las Aplicaciones Web
Por Jesse James Garrett

Si algo del actual diseño de interacción puede ser llamado glamoroso, es crear Aplicaciones Web. Después de todo, ¿cuando fue la ultima vez que escuchaste a alguien hablar de diseño de interacción de un producto que no esté en la Web? (Okay, dejando de lado el iPod). Todos los nuevos proyectos cool e innovadores están online.

Dejando de lado esto, los diseñadores de interacción Web no pueden evitar sentirse envidiosos de nuestros colegas que crean software de escritorio. Las aplicaciones de escritorio tienen una riqueza y respuesta que parecía fuera del alcance en Internet. La misma simplicidad que ha permitido la rápida proliferación de la Web también crea una brecha entre las experiencias que podemos proveer y las experiencias que los usuarios pueden lograr de las aplicaciones de escritorio.

Esa brecha se está cerrando. Échenle una mirada a las Google Suggest. Mira la forma en que los términos sugeridos se van actualizando a medida que uno tipea casi instantáneamente. Ahora mire Google Maps. Hace zoom. Usen el cursor para agarrar el mapa y navegarlo un poco. Otra vez, todo sucede casi instantáneamente, sin esperar que las paginas se recarguen.

Google Suggest y Google Maps son dos ejemplos de un nuevo acercamiento a las aplicaciones Web, que nosotros en Adaptative Path hemos denominado AJAX. El nombre es una abreviación o acrónimo para Asynchronous JavaScript + XML, y ello representa un cambio fundamental en que es posible en la Web. (more…)