XML DOM - objeto XMLHttpRequest

Objeto XMLHttpRequest

El objeto XMLHttpRequest ofrece acceso completo al protocolo HTTP, incluyendo la capacidad de realizar solicitudes POST y HEAD, así como solicitudes GET comunes. XMLHttpRequest puede devolver la respuesta del servidor web de manera síncrona o asíncrona, y puede devolver el contenido en forma de texto o de un documento DOM.

aunque se llama XMLHttpRequest, no se limita a usarse con documentos XML: puede recibir cualquier tipo de documento de texto.

el objeto XMLHttpRequest es llamado AJAX es una función clave de la arquitectura de aplicaciones web.

soporte del navegador

XMLHttpRequest goza de una buena compatibilidad en todos los navegadores modernos. La única dependencia del navegador se refiere a la creación del objeto XMLHttpRequest. En IE 5 y IE 6, es necesario usar el constructor específico de IE ActiveXObject(). Como se menciona en Objeto XMLHttpRequest Se describe en esta sección.

Estandarización W3C

El objeto XMLHttpRequest no se ha estandarizado, pero W3C ha comenzado a trabajar en su estandarización. El contenido de este manual se basa en el borrador de trabajo de estandarización.

La implementación actual de XMLHttpRequest es bastante consistente. Sin embargo, hay diferencias menores con el estándar. Por ejemplo, una implementación puede devolver null, mientras que el estándar requiere una cadena vacía, o una implementación puede establecer readyState en 3 sin garantizar que estén disponibles todas las cabeceras de respuesta.

Atributo

readyState

Estado de la solicitud HTTP. Cuando se crea un XMLHttpRequest por primera vez, el valor de esta propiedad comienza en 0 y aumenta hasta que se recibe la respuesta HTTP completa.

Cada uno de los 5 estados tiene un nombre no oficial asociado. A continuación se muestra una tabla con los estados, nombres y significados:

Estado Nombre Descripción
0 Uninitialized Estado inicializado. El objeto XMLHttpRequest se ha creado o se ha restablecido con el método abort().
1 Open Se ha llamado al método open(), pero no se ha llamado al método send(). La solicitud aún no se ha enviado.
2 Sent Se ha llamado al método Send(), la solicitud HTTP se ha enviado al servidor web. No se ha recibido respuesta.
3 Receiving Todas las cabeceras de respuesta se han recibido. El cuerpo de respuesta comienza a recibir pero no se ha completado.
4 Loaded La respuesta HTTP se ha recibido completamente.

El valor de readyState no disminuirá a menos que se llame al método abort() o open() durante el proceso de procesamiento de una solicitud. Cada vez que aumenta el valor de este atributo, se dispara el manejador de eventos onreadystatechange.

responseText

Hasta ahora, el cuerpo de respuesta recibido del servidor (sin incluir la cabecera), o una cadena vacía si aún no se ha recibido datos.

Si readyState es menor que 3, este atributo es una cadena vacía. Cuando readyState es 3, este atributo devuelve la parte de respuesta recibida hasta ahora. Si readyState es 4, este atributo almacena el cuerpo de respuesta completo.

Si la respuesta contiene una cabecera de encodificación de caracteres especificada para el cuerpo de respuesta, se utiliza esa codificación. De lo contrario, se asume que se utiliza Unicode UTF-8.

responseXML

La respuesta a la solicitud se解析为 XML y se utiliza como Objeto Documentodevolver.

status

devuelto por el servidor Código de estado HTTP, como 200 indica éxito, mientras que 404 indica un error de "No encontrado". Leer este atributo cuando el estado readyState sea menor que 3 causará una excepción.

statusText

Esta propiedad especifica el código de estado HTTP de la solicitud utilizando un nombre en lugar de un número. Por ejemplo, cuando el estado es 200, es "OK", y cuando el estado es 404, es "Not Found". Al igual que el atributo status, leer este atributo cuando el estado readyState sea menor que 3 causará una excepción.

Manejador de eventos

onreadystatechange

Función de manejo de eventos llamada cada vez que cambia el atributo readyState. También puede llamarse varias veces cuando el estado readyState sea 3.

Método

abort()

Cancelar la respuesta actual, cerrar la conexión y finalizar cualquier actividad de red pendiente.

Este método restablece el objeto XMLHttpRequest al estado readyState 0 y cancela todas las actividades de red pendientes. Por ejemplo, si una solicitud lleva demasiado tiempo y la respuesta ya no es necesaria, se puede llamar a este método.

getAllResponseHeaders()

Devolver los encabezados de respuesta HTTP como una cadena no analizada.

Si el estado readyState es menor que 3, este método devuelve null. De lo contrario, devuelve todos los encabezados de respuesta HTTP enviados por el servidor. Los encabezados se devuelven como una cadena única, una línea por encabezado. Cada línea se separa por un retorno de carro y una nueva línea (\r\n).

getResponseHeader()

Devolver el valor del encabezado de respuesta HTTP especificado. El parámetro es el nombre del encabezado de respuesta HTTP que se desea devolver. Se puede especificar cualquier mayúscula o minúscula para el nombre del encabezado, y la comparación con el encabezado de respuesta no distingue entre mayúsculas y minúsculas.

El valor de retorno de este método es el valor del encabezado HTTP de respuesta especificado. Si no se recibe este encabezado o el estado readyState es menor que 3, se devuelve una cadena vacía. Si se reciben varios encabezados con un nombre especificado, los valores de los encabezados se concatenan y se devuelven, separados por comas y espacios.

open()

Inicializar los parámetros de solicitud HTTP, como la URL y el método HTTP, pero no enviar la solicitud.

send()

Enviar una solicitud HTTP, utilizando los parámetros pasados al método open() y el cuerpo de solicitud opcional pasado a este método.

setRequestHeader()

Establecer o agregar un HTTP solicitud a una solicitud abierta pero no enviada.

XMLHttpRequest.open()

Inicializar parámetros de solicitud de HTTP

Sintaxis

open(method, url, async, username, password)

El parámetro method es el método HTTP utilizado para la solicitud. Los valores incluyen GET, POST y HEAD.

El parámetro url es el cuerpo de la solicitud. La mayoría de los navegadores implementan una política de seguridad de origen y requieren que esta URL tenga el mismo nombre de host y puerto que el texto que contiene el script.

El parámetro async indica que la solicitud debe ejecutarse de manera asíncrona. Si este parámetro es false, la solicitud es síncrona y las llamadas posteriores a send() bloquearán hasta que se reciba completamente la respuesta. Si este parámetro es true o se omite, la solicitud es asíncrona y generalmente se necesita un manejador de eventos onreadystatechange.

Los parámetros username y password son opcionales y proporcionan credenciales de autenticación necesarias para la autorización de url. Si se especifican, sobrescriben cualquier资格 especificada por la url.

Explicación

Este método inicializa los parámetros de solicitud para su uso posterior por parte del método send(). Establece readyState en 1, elimina todos los encabezados de solicitud especificados anteriormente y todos los encabezados de respuesta recibidos anteriormente, y establece los parámetros responseText, responseXML, status y statusText en sus valores predeterminados. Es seguro llamar a este método cuando readyState sea 0 (cuando el objeto XMLHttpRequest se crea o se llama al método abort()) y cuando readyState sea 4 (cuando se ha recibido la respuesta). Cuando se llama a este método para cualquier otro estado, el comportamiento del método open() es el especificado.

Además de guardar los parámetros de solicitud para el método send() y restablecer el objeto XMLHttpRequest para su reutilización, el método open() no tiene otro comportamiento. Es importante destacar que cuando se llama a este método, la implementación generalmente no abre una conexión de red a un servidor web.

XMLHttpRequest.send()

Enviar una solicitud HTTP

Sintaxis

send(body)

Si el método HTTP especificado mediante la llamada a open() es POST o PUT, el parámetro body especifica el cuerpo de la solicitud, como una cadena o Objeto DocumentoSi el cuerpo de la solicitud no es necesario, este parámetro es null. Para cualquier otro método, este parámetro no está disponible y debe ser null (algunas implementaciones no permiten omitir este parámetro).

Explicación

Este método provoca el envío de una solicitud HTTP. Si no se ha llamado previamente a open(), o más específicamente, si readyState no es 1, send() lanza una excepción. De lo contrario, envía una solicitud HTTP que consta de los siguientes componentes:}

  • El método HTTP, URL y la autenticación especificados anteriormente por el llamado open() (si hay uno).
  • El encabezado de solicitud especificado anteriormente por el llamado setRequestHeader() (si hay uno).
  • Pasado a este método Cuerpo Parámetros.

Una vez que se haya publicado la solicitud, send() establece readyState en 2 y dispara el gestor de eventos onreadystatechange.

Si el parámetro async del llamado previo open() es false, este método se bloqueará y no devolverá nada, hasta que readyState sea 4 y se reciba completamente la respuesta del servidor. De lo contrario, si el parámetro async es true o se omite, send() devuelve inmediatamente y, como se explicará más adelante, la respuesta del servidor se procesará en un hilo en segundo plano.

Si el servidor responde con una redirección HTTP, el método send() o el hilo en segundo plano sigue automáticamente la redirección. Una vez que se hayan recibido todos los encabezados de respuesta HTTP, el hilo send() o en segundo plano establece readyState en 3 y dispara el gestor de eventos onreadystatechange. Si la respuesta es larga, el hilo send() o en segundo plano puede disparar el gestor de eventos onreadystatechange en el estado 3: esto puede actuar como un indicador de progreso de descarga. Finalmente, cuando la respuesta se complete, el hilo send() o en segundo plano establece readyState en 4 y dispara el gestor de eventos por última vez.

XMLHttpRequest.setRequestHeader()

Sintaxis

setRequestHeader(name, value)

El parámetro name es el nombre del encabezado que se va a configurar. Este parámetro no debe incluir espacios en blanco, dos puntos o saltos de línea.

El parámetro value es el valor del encabezado. Este parámetro no debe incluir saltos de línea.

Explicación

El método setRequestHeader() especifica un encabezado de solicitud HTTP, que debe incluirse en la solicitud publicada mediante el llamado send(). Este método solo se puede llamar cuando readyState sea 1, por ejemplo, después de llamar a open(), pero antes de llamar a send().

Si se ha especificado previamente un encabezado con nombre especificado, el nuevo valor de este encabezado es: el valor especificado anteriormente, más una coma, espacios en blanco y el valor especificado en esta llamada.

Si la llamada open() especifica una credencial de autenticación, XMLHttpRequest envía automáticamente una cabecera de solicitud de Authorization apropiada. Sin embargo, puedes usar setRequestHeader() para agregar esta cabecera. Del mismo modo, si el servidor web ya ha almacenado y transmitido un cookie asociado con la URL pasada a open(), las cabeceras de Cookie o Cookie2 apropiadas también se incluyen automáticamente en la solicitud. Puedes agregar estos cookies a la cabecera llamando a setRequestHeader(). XMLHttpRequest también puede proporcionar un valor predeterminado para la cabecera User-Agent. Si lo hace, cualquier valor que especifiques para esta cabecera se agregará después de este valor predeterminado.

Algunas cabeceras de solicitud se configuran automáticamente por XMLHttpRequest en lugar de por este método para cumplir con el protocolo HTTP. Esto incluye las cabeceras relacionadas con el proxy:

  • Host
  • Connection
  • Keep-Alive
  • Accept-charset
  • Accept-Encoding
  • If-Modified-Since
  • If-None-Match
  • If-Range
  • Rango