fbpx
Wikipedia

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 implementa 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.

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.[1]​ Esta primera versión se publicó utilizando un objeto ActiveX, lo que significa que podía ser utilizada desde cualquier entorno de desarrollo de software con soporte para esta tecnología, es decir, prácticamente la 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.[1]​ 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.[2]​ La versión actual de 17 de enero de 2012, denominada XMLHttpRequest Level 2 es el resultado de varias revisiones.[3]

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 26 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

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 caché en el servidor HTTP, en los proxy caché intermedios y en el navegador WEB.

La interfaz se implementa en una clase de la que se debe crear una nueva instancia mediante el constructor adecuado. Es posible realizar peticiones síncronas y asíncronas al servidor. Cuando las operaciones son síncronas la ejecución del programa se detiene hasta que se completa la operación. En una llamada asíncrona el flujo de proceso no se detiene a esperar la respuesta sino que esta continúa en segundo plano y se define un manejador de evento que se ejecutará cuando se complete la petición.

Identificación del juego de caracteres

Otro elemento importante en la especificación, es el manejo de juegos de caracteres u hojas de códigos. La codificación y decodificación de texto y la identificación de los juegos de caracteres mediante cabeceras HTTP y tipos MIME. El estándar XMLHttpRequest recomienda UTF-8 para la codificación de cadenas de texto.[3]

Para determinar la codificación de los datos transmitidos se usa el siguiente algoritmo, utilizando la primera opción que se cumpla:

  • 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á siguiendo las reglas de XML o HTML según corresponda.
  • Si la cabecera HTTP especifica un tipo MIME mediante Content-Type e identifica un juego de caracteres se utiliza dicho juego de caracteres.
  • Si los datos enviados especifican un BOM válido, se utilizará la variante UTF determinada por dicho BOM.
  • Utilizar UTF-8.

Si no se identifica correctamente la codificación, existe el riesgo de que en un sistema en el que se mezclen varias codificaciones puedan producirse errores de visualización de caracteres. Por ejemplo al incorporar funcionalidad AJAX, que por defecto utiliza UTF-8, 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

Referencias

  1. Microsoft. «About Native XMLHTTP» (en inglés). Consultado el 22 de mayo de 2012. 
  2. Anne van Kesteren; Dean Jackson (5 de abril de 2006). «The XMLHttpRequest Object» (en inglés). W3C. 
  3. Anne van Kesteren (17 de enero de 2012). «XMLHttpRequest Level 2» (en inglés). W3C. 

Enlaces externos

  • Propuesta final de estándar para el objeto XMLHttpRequest — W3C (en inglés)
  • Propuesta actual de estándar para el objeto XMLHttpRequest, level 2 — W3C (en inglés)
  • Interfaz XMLHttpRequest en el navegador Internet Explorer de Microsoft y presentación del soporte nativo (en inglés)
  • Interfaz XMLHttpRequest en Mozilla (en inglés)
  • Interfaz XMLHttpRequest en el navegador Safari de Apple (en inglés)
  •   Datos: Q220674

xmlhttprequest, también, referida, como, xmlhttp, extensible, markup, language, hypertext, transfer, protocol, interfaz, empleada, para, realizar, peticiones, http, https, servidores, para, datos, transferidos, cualquier, codificación, basada, texto, incluyend. XMLHttpRequest XHR tambien 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 codificacion basada en texto incluyendo texto plano XML JSON HTML y codificaciones particulares especificas La interfaz se implementa como una clase de la que una aplicacion cliente puede generar tantas instancias como necesite para manejar el dialogo con el servidor El uso mas popular si bien no el unico de esta interfaz es proporcionar contenido dinamico y actualizaciones asincronas en paginas web mediante tecnologias construidas sobre ella como por ejemplo AJAX Indice 1 Historia 2 Evolucion de la interfaz 3 Implementacion y uso de la interfaz 3 1 Identificacion del juego de caracteres 3 2 Atributos 3 3 Metodos 3 4 Eventos 4 Instanciacion del objeto 5 Vease tambien 6 Referencias 7 Enlaces externosHistoria EditarLa primera version de la interfaz XMLHttpRequest fue desarrollada por Microsoft que la introdujo en la version 5 0 de Internet Explorer 1 Esta primera version se publico utilizando un objeto ActiveX lo que significa que podia ser utilizada desde cualquier entorno de desarrollo de software con soporte para esta tecnologia es decir practicamente la totalidad de plataformas generalistas de desarrollo para Microsoft Windows Microsoft ha seguido manteniendo y actualizando esta tecnologia incluyendo la funcionalidad dentro del Microsoft XML Parser MSXML en sus sucesivas versiones A partir de la version 7 de Internet Explorer la interfaz se ofrece de manera integrada 1 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 incorporo la primera implementacion integrada de XMLHttpRequest en la version 1 0 de la Suite Mozilla en 2002 Esta implementacion seria seguida por Apple a partir de Safari 1 2 Konqueror Opera Software a partir del Opera 8 0 e iCab desde la version 3 0b352 El World Wide Web Consortium presento el 27 de septiembre de 2006 el primer borrador de una especificacion estandar de la interfaz 2 La version actual de 17 de enero de 2012 denominada XMLHttpRequest Level 2 es el resultado de varias revisiones 3 Mientras no se alcance una version definitiva los desarrolladores de aplicaciones WEB deberan tener en cuenta las diferencias entre implementaciones o bien utilizar paquetes o frameworks que realicen esta funcion Evolucion de la interfaz EditarEl 26 de febrero de 2008 se publico la primera version de la especificacion XMLHttpRequest Level 2 Esta nueva especificacion que se inicia antes de haber publicado la version definitiva de la interfaz pretende anadir nuevas funciones como peticiones entre dominios cross site eventos de progreso y manejo de flujos de bytes streams tanto para el envio como para la recepcion Implementacion y uso de la interfaz EditarXMLHttpRequest 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 La interfaz se implementa en una clase de la que se debe crear una nueva instancia mediante el constructor adecuado Es posible realizar peticiones sincronas y asincronas al servidor Cuando las operaciones son sincronas la ejecucion del programa se detiene hasta que se completa la operacion En una llamada asincrona el flujo de proceso no se detiene a esperar la respuesta sino que esta continua en segundo plano y se define un manejador de evento que se ejecutara cuando se complete la peticion Identificacion del juego de caracteres Editar Otro elemento importante en la especificacion es el manejo de juegos de caracteres u hojas de codigos La codificacion y decodificacion de texto y la identificacion de los juegos de caracteres mediante cabeceras HTTP y tipos MIME El estandar XMLHttpRequest recomienda UTF 8 para la codificacion de cadenas de texto 3 Para determinar la codificacion de los datos transmitidos se usa el siguiente algoritmo utilizando la primera opcion que se cumpla Si los datos transmitidos son XML o HTML y asi se identifica mediante la correspondiente cabecera Content Type de HTTP la codificacion se detectara siguiendo las reglas de XML o HTML segun corresponda Si la cabecera HTTP especifica un tipo MIME mediante Content Type e identifica un juego de caracteres se utiliza dicho juego de caracteres Si los datos enviados especifican un BOM valido se utilizara la variante UTF determinada por dicho BOM Utilizar UTF 8 Si no se identifica correctamente la codificacion existe el riesgo de que en un sistema en el que se mezclen varias codificaciones puedan producirse errores de visualizacion de caracteres Por ejemplo al incorporar funcionalidad AJAX que por defecto utiliza UTF 8 a una pagina WEB codificada con ISO 8859 1 Atributos Editar Atributo DescripcionreadyState 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 bytesresponseText Devuelve la respuesta como una cadenaresponseXML Devuelve la respuesta como XML Esta propiedad devuelve un objeto documento XML que puede ser examinado usando las propiedades y metodos del arbol del Document Object Model status Devuelve el estado como un numero p ej 404 para Not Found y 200 para OK statusText Devuelve el estado como una cadena p ej Not Found o OK Metodos Editar Metodo Descripcionabort Cancela la peticion en cursogetAllResponseHeaders Devuelve el conjunto de cabeceras HTTP como una cadena getResponseHeader nombreCabecera Devuelve el valor de la cabecera HTTP especificada open metodo URL asincrono nombreUsuario clave Especifica el metodo URL y otros atributos opcionales de una peticion El parametro de metodo puede tomar los valores GET POST o PUT GET y POST son dos formas para solicitar datos con GET los parametros de la peticion se codifican en la URL y con POST en las cabeceras de HTTP El parametro URL puede ser una URL relativa o completa El parametro asincrono especifica si la peticion sera gestionada asincronamente o no Un valor true indica que el proceso del script continua despues del metodo send sin esperar a la respuesta y false indica que el script se detiene hasta que se complete la operacion tras lo cual se reanuda la ejecucion En el caso asincrono 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 Envia la peticionsetRequestHeader etiqueta valor Anade un par etiqueta valor a la cabecera HTTP a enviar Eventos Editar Propiedad Descripciononreadystatechange Evento que se dispara con cada cambio de estado onabort Level 2 Evento que se dispara al abortar la operacion 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 periodicamente con informacion 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 si son recogidos por la nueva especificacion Level 2 como puede verse en el cuadro anterior Instanciacion del objeto EditarA continuacion se muestra un posible codigo JavaScript que permite crear el objeto teniendo en cuenta las diferencias entre los navegadores mas 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 Vease tambien EditarAJAX tecnica de desarrollo web para crear aplicaciones interactivas SOAP protocolo de comunicacion por medio de intercambio de datos XML XML JSON para transferencia de informacionReferencias Editar a b Microsoft About Native XMLHTTP en ingles Consultado el 22 de mayo de 2012 Anne van Kesteren Dean Jackson 5 de abril de 2006 The XMLHttpRequest Object en ingles W3C a b Anne van Kesteren 17 de enero de 2012 XMLHttpRequest Level 2 en ingles W3C Enlaces externos EditarPropuesta final de estandar para el objeto XMLHttpRequest W3C en ingles Propuesta actual de estandar para el objeto XMLHttpRequest level 2 W3C en ingles Interfaz XMLHttpRequest en el navegador Internet Explorer de Microsoft y presentacion del soporte nativo en ingles Interfaz XMLHttpRequest en Mozilla en ingles Interfaz XMLHttpRequest en el navegador Safari de Apple en ingles Datos Q220674 Obtenido de https es wikipedia org w index php title XMLHttpRequest amp oldid 125248589, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos