XMLHttpRequest

XMLHttpRequest

XMLHttpRequest (XHR), también referida como XMLHTTP (Extensible Markup Language / Hypertext Transfer Protocol), es una interfaz empleada para realizar peticiones HTTP y HTTPS a servidores Web. Para los datos transferidos se usa cualquier codificación basada en texto, incluyendo: texto plano, XML, JSON, HTML y codificaciones particulares específicas. La interfaz se presenta como una clase de la que una aplicación cliente puede generar tantas instancias como necesite para manejar el diálogo con el servidor.

El uso más popular, si bien no el único, de esta interfaz es proporcionar contenido dinámico y actualizaciones asíncronas en páginas WEB mediante tecnologías construidas sobre ella como por ejemplo AJAX.

Contenido

Historia

La primera versión de la interfaz XMLHttpRequest fue desarrollada por Microsoft que la introdujo en la versión 5.0 de Internet Explorer. Esta primera versión se publicó utilizando un objeto ActiveX, lo que significa que puede ser utilizada desde cualquier entorno de desarrollo de software con soporte para esta tecnología, es decir, la práctica totalidad de plataformas generalistas de desarrollo para Microsoft Windows. Microsoft ha seguido manteniendo y actualizando esta tecnología incluyendo la funcionalidad dentro del Microsoft XML Parser (MSXML) en sus sucesivas versiones. A partir de la versión 7 de Internet Explorer la interfaz se ofrece de manera integrada. Al ser integrada, el acceso a la interfaz se realiza enteramente con objetos (JScript o VBScript) proporcionados por el navegador y no mediante bibliotecas externas.

El proyecto Mozilla incorporó la primera implementación integrada de XMLHttpRequest en la versión 1.0 de la Suite Mozilla en 2002. Esta implementación sería seguida por Apple a partir de Safari 1.2, Konqueror, Opera Software a partir del Opera 8.0 e iCab desde la versión 3.0b352.

El World Wide Web Consortium presentó el 27 de septiembre de 2006 el primer borrador de una especificación estándar de la interfaz. La versión actual de 15 de abril de 2008, etiquetada como borrador final (last call working draft), es el resultado de varias revisiones.

Mientras no se alcance una versión definitiva, los desarrolladores de aplicaciones WEB deberán tener en cuenta las diferencias entre implementaciones o bien utilizar paquetes o frameworks que realicen esta función.

Evolución de la interfaz

El 25 de febrero de 2008 se publicó la primera versión de la especificación XMLHttpRequest Level 2. Esta nueva especificación, que se inicia antes de haber publicado la versión definitiva de la interfaz, pretende añadir nuevas funciones como: peticiones entre dominios (cross-site), eventos de progreso y manejo de flujos de bytes (streams) tanto para el envío como para la recepción.

Implementación y uso de la interfaz

La interfaz se presenta encapsulada en una clase. Para utilizarlo, la aplicación cliente debe crear una nueva instancia mediante el constructor adecuado. Es posible realizar peticiones síncronas y asíncronas al servidor; en una llamada asíncrona el flujo de proceso no se detiene a esperar la respuesta como se haría en una llamada síncrona, si no que se define una función que se ejecutará cuando se complete la petición: un manejador de evento.

XMLHttpRequest es una interfaz para realizar llamadas mediante HTTP, por lo que es recomendable un buen conocimiento de este protocolo. Es importante el manejo correcto de la cache en el servidor HTTP, en los proxy cache intermedios y en el navegador WEB.

Otro elemento importante es el manejo de juegos de caracteres, la codificación y decodificación de texto y su identificación mediante cabeceras HTTP y MIME. El estándar XMLHttpRequest recomienda UTF-8 para la codificación de cadenas de texto. La codificación particular de los datos transmitidos se determina según el siguiente algoritmo, utilizando la primera opción que corresponda.

  • Si los datos transmitidos son XML o HTML, y así se identifica mediante la correspondiente cabecera Content-Type de HTTP, la codificación se detectará basándose en las reglas estándar de XML o HTML según corresponda.
  • Si la cabecera HTTP especifica un tipo MIME mediante Content-Type e identifica un charset se utiliza dicho charset.
  • Si los datos enviados especifican un BOM válido, se utilizará la variante UTF determinada por dicho BOM.
  • Utilizar UTF-8.

Es importante tener esto en cuenta en entornos dónde se mezclen varias codificaciones, por ejemplo, pueden producirse errores de visualización de caracteres al incorporar funcionalidad AJAX a una página WEB codificada con ISO 8859-1.

Atributos

Atributo Descripción
readyState Devuelve el estado del objeto como sigue:

0 = sin inicializar, 1 = abierto, 2 = cabeceras recibidas, 3 = cargando y 4 = completado.

responseBody (Level 2) Devuelve la respuesta como un array de bytes
responseText Devuelve la respuesta como una cadena
responseXML Devuelve la respuesta como XML. Esta propiedad devuelve un objeto documento XML, que puede ser examinado usando las propiedades y métodos del árbol del Document_Object_Model.
status Devuelve el estado como un número (p. ej. 404 para "Not Found" y 200 para "OK").
statusText Devuelve el estado como una cadena (p. ej. "Not Found" o "OK").

Métodos

Método Descripción
abort() Cancela la petición en curso
getAllResponseHeaders() Devuelve el conjunto de cabeceras HTTP como una cadena.
getResponseHeader( nombreCabecera ) Devuelve el valor de la cabecera HTTP especificada.
open

( método, URL [, asíncrono
[, nombreUsuario [, clave]]] )

Especifica el método, URL y otros atributos opcionales de una petición.

El parámetro de método puede tomar los valores "GET", "POST", o "PUT" ("GET" y "POST" son dos formas para solicitar datos, con "GET" los parámetros de la petición se codifican en la URL y con "POST" en las cabeceras de HTTP).

El parámetro URL puede ser una URL relativa o completa.

El parámetro asíncrono especifica si la petición será gestionada asíncronamente o no. Un valor true indica que el proceso del script continúa después del método send(), sin esperar a la respuesta, y false indica que el script se detiene hasta que se complete la operación, tras lo cual se reanuda la ejecución.

En el caso asíncrono se especifican manejadores de eventos, que se ejecutan ante cada cambio de estado y permiten tratar los resultados de la consulta una vez que se reciben, o bien gestionar eventuales errores.

send([datos]) Envía la petición
setRequestHeader( etiqueta, valor ) Añade un par etiqueta/valor a la cabecera HTTP a enviar.

Eventos

Propiedad Descripción
onreadystatechange Evento que se dispara con cada cambio de estado.
onabort (Level 2) Evento que se dispara al abortar la operación.
onload (Level 2) Evento que se dispara al completar la carga.
onloadstart (Level 2) Evento que se dispara al iniciar la carga.
onprogress (Level 2) Evento que se dispara periódicamente con información de estado.

La propuesta inicial de W3C no incluye propiedades y eventos presentes en implementaciones reales, como por ejemplo los eventos onload, onerror, onprogress, onabort y ontimeout. Algunos de ellos sí son recogidos por la nueva especificación Level 2, como puede verse en el cuadro anterior.

Instanciación del objeto

A continuación se muestra un posible código JavaScript que permite crear el objeto teniendo en cuenta las diferencias entre los navegadores más populares.

   var httpRequest;
        if (window.XMLHttpRequest)
        {
                //El explorador implementa la interfaz de forma nativa
                httpRequest = new XMLHttpRequest();
        } 
        else if (window.ActiveXObject)
        {
                //El explorador permite crear objetos ActiveX
                try {
                        httpRequest = new ActiveXObject("MSXML2.XMLHTTP");
                } catch (e) {
                        try {
                                httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
                        } catch (e) {}
                }
        }
        if (!httpRequest)
        {
                alert("No ha sido posible crear una instancia de XMLHttpRequest");
        }

Véase también

  • AJAX, técnica de desarrollo web para crear aplicaciones interactivas
  • SOAP, protocolo de comunicación por medio de intercambio de datos XML
  • XML, JSON, para transferencia de información

Enlaces externos


Wikimedia foundation. 2010.

Игры ⚽ Поможем решить контрольную работу

Mira otros diccionarios:

  • XMLHttpRequest — (XMLHTTP, XHR)  API, доступное в скриптовых языках браузеров, таких как JavaScript. Использует запросы HTTP или HTTPS напрямую к веб серверу и загружает данные ответа сервера напрямую в вызывающий скрипт.[1] Информация может передаваться в… …   Википедия

  • Xmlhttprequest — ist eine API zum Transfer von beliebigen Daten über das Protokoll HTTP. Dabei können sämtliche HTTP Anfragemethoden (unter anderem GET, POST, HEAD, PUT) verwendet werden. Wenn eine Anfrage XML Daten liefert, kann XMLHttpRequest diese alternativ… …   Deutsch Wikipedia

  • XMLHttpRequest — (XHR) ist eine API zum Transfer von beliebigen Daten über das Protokoll HTTP. Dabei können sämtliche HTTP Anfragemethoden (unter anderem GET, POST, HEAD, PUT) verwendet werden. Wenn eine Anfrage XML Daten liefert, kann XMLHttpRequest diese… …   Deutsch Wikipedia

  • XMLHTTPRequest — est un objet ActiveX ou Javascript qui permet d obtenir des données au format XML, JSON, mais aussi HTML, ou encore texte simple à l aide de requêtes HTTP. On explique le succès récent de l objet et la très grande utilisation qui en est faite… …   Wikipédia en Français

  • XMLHttpRequest — est un objet ActiveX ou Javascript qui permet d obtenir des données au format XML, JSON, mais aussi HTML, ou encore texte simple à l aide de requêtes HTTP. On explique le succès récent de l objet et la très grande utilisation qui en est faite… …   Wikipédia en Français

  • XMLHttpRequest — HTTP Persistence · Compression · HTTPS Request methods OPTIONS · GET · HEAD · POST · PUT · DELETE · TRACE · CONNECT Header fields Cookie · ETag · Location · Referer DNT · …   Wikipedia

  • Xmlhttprequest — XMLHTTP (XMLHttpRequest, XHR) набор API, используемый в языках JScript, VBScript и им подобных для пересылки различных данных (XHTML, HTTP протоколу между браузером и веб сервером. Позволяет осуществлять HTTP запросы к удаленному серверу без… …   Википедия

  • XHR — XMLHttpRequest ist eine API zum Transfer von beliebigen Daten über das Protokoll HTTP. Dabei können sämtliche HTTP Anfragemethoden (unter anderem GET, POST, HEAD, PUT) verwendet werden. Wenn eine Anfrage XML Daten liefert, kann XMLHttpRequest… …   Deutsch Wikipedia

  • XHR — XMLHttpRequest XMLHttpRequest est un objet ActiveX ou Javascript qui permet d obtenir des données au format XML, JSON, mais aussi HTML, ou encore texte simple à l aide de requêtes HTTP. On explique le succès récent de l objet et la très grande… …   Wikipédia en Français

  • XMLHttp — XMLHttpRequest XMLHttpRequest est un objet ActiveX ou Javascript qui permet d obtenir des données au format XML, JSON, mais aussi HTML, ou encore texte simple à l aide de requêtes HTTP. On explique le succès récent de l objet et la très grande… …   Wikipédia en Français

Compartir el artículo y extractos

Link directo
Do a right-click on the link above
and select “Copy Link”