XMLHttpRequestObjeto


Con el objeto XMLHttpRequest, puede actualizar una parte de una página web sin recargar toda la página.


Objeto XMLHttpRequest

El objeto XMLHttpRequest se utiliza para intercambiar datos con el servidor en segundo plano.

El objeto XMLHttpRequest esel sueño de los desarrolladores, porque puedes:

  • Actualizar una página web sin recargarla
  • Solicitar datos del servidor después de que la página se haya cargado
  • Recibir datos del servidor después de que la página se haya cargado
  • Enviar datos al servidor en segundo plano

Crear el objeto XMLHttpRequest

Todos los navegadores modernos (IE7+, Firefox, Chrome, Safari y Opera) tienen un objeto XMLHttpRequest integrado.

Sintaxis para crear el objeto XMLHttpRequest

xmlhttp=new XMLHttpRequest();

Las versiones antiguas de Internet Explorer (IE5 e IE6) usan el objeto ActiveX:

xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

Para manejar todos los navegadores modernos, incluidos IE5 e IE6, verifique si el navegador admite el objeto XMLHttpRequest. Si lo admite, cree un objeto XMLHttpRequest; si no lo admite, cree un objeto ActiveX:

Ejemplo

if (window.XMLHttpRequest) { //Los navegadores IE7+, Firefox, Chrome, Opera y Safari ejecutan el código xmlhttp=new XMLHttpRequest(); } else { //Los navegadores IE6 e IE5 ejecutan el código xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); }

Pruébalo »


Enviar una solicitud al servidor

Para enviar una solicitud al servidor, usamos los métodos open() y send() del objeto XMLHttpRequest:

xmlhttp.open("GET","xmlhttp_info.txt",true);
xmlhttp.send();

Método Descripción
open(method,url,async) Especifica el tipo de solicitud, la URL y si la solicitud debe procesarse de forma asíncrona.

method: el tipo de solicitud: GET o POST
url: la ubicación del archivo en el servidor
async: true (asíncrono) o false (síncrono)
send(string) Envía la solicitud al servidor.

string: solo para solicitudes POST


¿GET o POST?

GET es más simple y rápido que POST, y se puede usar en la mayoría de los casos.

Sin embargo, use siempre solicitudes POST en los siguientes casos:

  • Cuando el archivo en caché no es una opción (actualizar archivos o una base de datos en el servidor)
  • Cuando la cantidad de datos enviados al servidor es grande (POST no tiene límite de tamaño)
  • Para enviar entradas del usuario (que pueden contener caracteres desconocidos), POST es más potente y seguro que GET

URL: archivo en el servidor

El parámetro url del método open() es la dirección de un archivo en el servidor:

xmlhttp.open("GET","xmlhttp_info.txt",true);

El archivo puede ser de cualquier tipo (como .txt y .xml), o un script del servidor (como .html y .php, que pueden ejecutar acciones en el servidor antes de enviar la respuesta).


Asíncrono: ¿true o false?

Para enviar la solicitud de forma asíncrona, el parámetro async del método open() debe establecerse en true:

xmlhttp.open("GET","xmlhttp_info.txt",true);

Enviar solicitudes asíncronas es un gran avance para los desarrolladores web. Muchas tareas que se ejecutan en el servidor consumen mucho tiempo.

Al enviar de forma asíncrona, JavaScript no tiene que esperar la respuesta del servidor, sino que puede:

  • Ejecutar otros scripts mientras espera la respuesta del servidor
  • Manejar la respuesta cuando esté lista

Async=true

Cuando se usa async=true, especifique una función para ejecutar en el evento onreadystatechange cuando la respuesta esté lista:

Ejemplo

xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("myDiv").innerHTML=xmlhttp.responseText; } } xmlhttp.open("GET","xmlhttp_info.txt",true); xmlhttp.send();

Pruébalo »


Async=false

Para usar async=false, cambie el tercer parámetro del método open() a false:

xmlhttp.open("GET","xmlhttp_info.txt",false);

No se recomienda usar async=false, pero es aceptable para manejar algunas solicitudes pequeñas.

Recuerde que JavaScript no continuará ejecutándose hasta que la respuesta del servidor esté lista. Si el servidor está ocupado o lento, la aplicación se colgará o se detendrá.

Nota:Cuando use async=false, no escriba la función onreadystatechange; simplemente coloque el código después de la sentencia send():

Ejemplo

xmlhttp.open("GET","xmlhttp_info.txt",false); xmlhttp.send(); document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

Pruébalo »


Respuesta del servidor

Para obtener la respuesta del servidor, use las propiedades responseText o responseXML del objeto XMLHttpRequest.

Propiedad Descripción
responseText Obtener los datos de la respuesta como una cadena
responseXML La propiedad ResponseXML devuelve un objeto de documento XML que se puede examinar y analizar utilizando los métodos y propiedades del árbol de nodos DOM.


Propiedad responseText

Si la respuesta del servidor no es XML, use la propiedad responseText.

La propiedad responseText devuelve la respuesta como una cadena, y puede usarla en consecuencia:

Ejemplo

document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

Pruébalo »


Propiedad responseXML

Si la respuesta del servidor es XML y desea analizarla como un objeto XML, use la propiedad responseXML:

Ejemplo

Solicitar el archivoy analizar la respuesta:

xmlDoc=xmlhttp.responseXML; var txt=""; x=xmlDoc.getElementsByTagName("ARTIST"); for (i=0;i<x.length;i++) { txt=txt + x[i].childNodes[0].nodeValue + ""; } document.getElementById("myDiv").innerHTML=txt;

Pruébalo »


Evento onreadystatechange

Cuando la solicitud se envía al servidor, queremos realizar algunas acciones según la respuesta.

El evento onreadystatechange se dispara cada vez que cambia readyState.

La propiedad readyState contiene el estado de XMLHttpRequest.

Las tres propiedades importantes del objeto XMLHttpRequest:

Propiedad Descripción
onreadystatechange Almacena la función (o el nombre de la función) que se llama automáticamente cada vez que cambia la propiedad readyState
readyState Contiene el estado de XMLHttpRequest. Cambia de 0 a 4:
0: solicitud no inicializada
1: conexión con el servidor establecida
2: solicitud recibida
3: procesando la solicitud
4: solicitud completada y respuesta lista
status 200:"OK"
404: página no encontrada

En el evento onreadystatechange, especificamos qué ocurre cuando la respuesta del servidor está lista para procesarse.

Cuando readyState es 4 o el estado es 200, la respuesta está lista:

Ejemplo

xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("myDiv").innerHTML=xmlhttp.responseText; } }

Pruébalo »

Nota:El evento onreadystatechange se dispara cada vez que readyState cambia, es decir, cuatro veces en total.


实例s

Más ejemplos

Recuperar información de cabecera con getAllResponseHeaders()
Recupera la información de cabecera del recurso (archivo).

Recuperar información de cabecera específica con getResponseHeader()
Recupera la información de cabecera especificada del recurso (archivo).


Cómo se comunica una página web con el servidor web cuando el usuario escribe caracteres en un campo de entrada.


Cómo extrae información una página web de una base de datos mediante el objeto XMLHttpRequest.


Crear un XMLHttpRequest para recuperar datos de un archivo XML y mostrar los datos en una tabla HTML.


Otras extensiones