Ir al contenido
Menú principal
Menú principal
mover a la barra lateral
ocultar
Navegación
Página principal
Cambios recientes
Página aleatoria
Ayuda sobre MediaWiki
Buscar
Buscar
español
Apariencia
Crear una cuenta
Acceder
Herramientas personales
No has accedido
Discusión
Contribuciones
Crear una cuenta
Acceder
Edición de «
XMLHttpRequest
»
Página
Discusión
español
Leer
Editar
Editar código
Ver historial
Herramientas
Herramientas
mover a la barra lateral
ocultar
Acciones
Leer
Editar
Editar código
Ver historial
General
Lo que enlaza aquí
Cambios relacionados
Información de la página
Apariencia
mover a la barra lateral
ocultar
Advertencia:
no has iniciado sesión. Tu dirección IP se hará pública si haces cualquier edición. Si
inicias sesión
o
creas una cuenta
, tus ediciones se atribuirán a tu nombre de usuario, además de otros beneficios.
Comprobación antispam. ¡
No
rellenes esto!
'''XMLHttpRequest (XHR)''', también referida como XMLHTTP (''Extensible Markup Language / Hypertext Transfer Protocol''), es una [[Application Programming Interface|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 (informática)|clase]] de la que una aplicación [[cliente-servidor|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]].<ref name="Implementación microsoft">{{cita web|autor=Microsoft|título=About Native XMLHTTP|url=http://msdn.microsoft.com/en-us/library/ms537505%28VS.85%29.aspx|fechaacceso=22 de mayo de 2012|idioma=inglés}}</ref> 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.<ref name="Implementación microsoft"></ref> 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 [[Fundación Mozilla|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 Computer|Apple]] a partir de [[Safari]] 1.2, [[Konqueror]], [[Opera Software]] a partir del [[Opera (navegador)|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.<ref name=w3cprimeraversion>{{cita web|autor=Anne van Kesteren|autor2=Dean Jackson|título=The XMLHttpRequest Object|url=http://www.w3.org/TR/2006/WD-XMLHttpRequest-20060405/|fecha=5 de abril de 2006|idioma=inglés|editorial=W3C}}</ref> La versión actual de 17 de enero de 2012, denominada ''XMLHttpRequest Level 2'' es el resultado de varias revisiones.<ref name=w3cversionactual>{{cita web|autor=Anne van Kesteren|título=XMLHttpRequest Level 2|url=http://www.w3.org/TR/XMLHttpRequest/|idioma=inglés|editorial=W3C|fecha=17 de enero de 2012}}</ref> 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 [[Framework|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 (programación)|instancia]] mediante el [[Constructor (informática)|constructor]] adecuado. Es posible realizar peticiones [[Sincronía|síncronas]] y [[Asincronía|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 [[Suceso (informática)|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.<ref name=w3cversionactual /> 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 <tt>Content-Type</tt> 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 <tt>Content-Type</tt> e identifica un juego de caracteres se utiliza dicho juego de caracteres. * Si los datos enviados especifican un [[UTF|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 === {| border=1 cellspacing=0 cellpadding=3 width="90%" !| Atributo !| Descripción |- | <tt>readyState</tt> | Devuelve el estado del objeto como sigue: 0 = sin inicializar, 1 = abierto, 2 = cabeceras recibidas, 3 = cargando y 4 = completado. |- | <tt>responseBody</tt> | ''(Level 2)'' Devuelve la respuesta como un array de bytes |- | <tt>responseText</tt> | Devuelve la respuesta como una cadena |- | <tt>responseXML</tt> | 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]]. |- | <tt>status</tt> | Devuelve el estado como un número (p. ej. 404 para "Not Found" y 200 para "OK"). |- | <tt>statusText</tt> | Devuelve el estado como una cadena (p. ej. "Not Found" o "OK"). |} === Métodos === {| border=1 cellspacing=0 cellpadding=3 width="90%" !|Método !|Descripción |- | <tt>abort()</tt> | Cancela la petición en curso |- | <tt>getAllResponseHeaders()</tt> | Devuelve el conjunto de cabeceras HTTP como una cadena. |- | nowrap | <tt>getResponseHeader( nombreCabecera )</tt> | Devuelve el valor de la cabecera HTTP especificada. |- | nowrap valign="top" | <tt>open ( método, URL [, asíncrono<br /> [, nombreUsuario [, clave]]] )</tt> |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. |- | <tt>send([datos])</tt> | Envía la petición |- | nowrap | <tt>setRequestHeader( etiqueta, valor )</tt> | Añade un par etiqueta/valor a la cabecera HTTP a enviar. |} === Eventos === {| border=1 cellspacing=0 cellpadding=3 width="90%" !| Propiedad !| Descripción |- | <tt>onreadystatechange</tt> | Evento que se dispara con cada cambio de estado. |- | <tt>onabort</tt> | ''(Level 2)'' Evento que se dispara al abortar la operación. |- | <tt>onload</tt> | ''(Level 2)'' Evento que se dispara al completar la carga. |- | <tt>onloadstart</tt> | ''(Level 2)'' Evento que se dispara al iniciar la carga. |- | <tt>onprogress</tt> | ''(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. <syntaxhighlight lang="javascript"> 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"); } </syntaxhighlight> == 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 == {{listaref}} == Enlaces externos == * [http://www.w3.org/TR/XMLHttpRequest Propuesta final de estándar para el objeto XMLHttpRequest ] — [[World Wide Web Consortium|W3C]] (en inglés) * [http://www.w3.org/TR/XMLHttpRequest2 Propuesta actual de estándar para el objeto XMLHttpRequest, level 2] — [[World Wide Web Consortium|W3C]] (en inglés) * [http://msdn2.microsoft.com/en-us/library/ms535874.aspx Interfaz XMLHttpRequest en el navegador Internet Explorer de Microsoft] y presentación del [http://msdn.microsoft.com/en-us/library/ms537505(VS.85).aspx soporte nativo] (en inglés) * [http://developer.mozilla.org/en/docs/XMLHttpRequest Interfaz XMLHttpRequest en Mozilla ] (en inglés) * [http://developer.apple.com/internet/webcontent/xmlhttpreq.html Interfaz XMLHttpRequest en el navegador Safari de Apple] (en inglés) {{Control de autoridades}} [[Categoría:Interfaces de programación de aplicaciones]] [[Categoría:AJAX]]
Resumen:
Al guardar los cambios aceptas los
términos de uso
y liberas de forma irrevocable tu contribución conforme a los términos de las licencias
licencia CC BY-SA 4.0
y
GFDL
. Aceptas igualmente que un hipervínculo o URL es atribución suficiente conforme a la licencia Creative Commons.
Cancelar
Ayuda de edición
(se abre en una ventana nueva)
Buscar
Buscar
Edición de «
XMLHttpRequest
»
Añadir idiomas
Añadir tema