Los últimos tutoriales de desarrollo web
 

El objeto XMLHttpRequest


Todos los navegadores modernos tienen un objeto incorporado XMLHttpRequest para solicitar datos de un servidor.

Todos los principales navegadores tienen un analizador XML integrado para acceder y manipular XML.


El objeto XMLHttpRequest

El objeto XMLHttpRequest se puede utilizar para solicitar datos de un servidor web.

El objeto XMLHttpRequest es a developers dream , porque usted puede:

  • Actualizar una página web sin tener que recargar la página
  • solicitar datos de un servidor - después de que la página se ha cargado
  • Recibir datos de un servidor - después de que la página se ha cargado
  • Enviar datos a un servidor - en el fondo

Ejemplo XMLHttpRequest

Cuando se escribe un carácter en el campo de entrada de abajo, un XMLHttpRequest se envía al servidor, y se devuelven algunas sugerencias de nombres (from the server) :

Ejemplo

Start typing a name in the input field below:

Name:

Suggestions:


El envío de un XMLHttpRequest

Todos los navegadores modernos tienen un objeto XMLHttpRequest incorporado.

Una sintaxis común para el uso de JavaScript, se parece a esto:

Ejemplo

var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
    if (xhttp.readyState == 4 && xhttp.status == 200) {
       // Action to be performed when the document is read;
    }
};
xhttp.open("GET", " filename ", true);
xhttp.send();
Inténtalo tú mismo "

Creación de un objeto XMLHttpRequest

La primera línea en el ejemplo anterior crea un objet XMLHttpRequest:

var xhttp = new XMLHttpRequest();

El evento onreadystatechange

La propiedad readyState mantiene el estado de la XMLHttpRequest.

El evento onreadystatechange se dispara cada vez que cambia el readyState.

Durante una solicitud del servidor, el readyState cambia de 0 a 4:

0: solicitud no inicializado
1: conexión del servidor estableció
2: solicitud recibida
3: Solicitud de procesamiento
4: solicitar acabado y la respuesta está listo

En la propiedad onreadystatechange, especificar una función a ejecutar cuando el readyState cambia:

xhttp.onreadystatechange = function()

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

if (xhttp.readyState == 4 && xhttp.status == 200)

Propiedades y métodos XMLHttpRequest

Método Descripción
new XMLHttpRequest() Crea un nuevo objeto XMLHttpRequest
open( method, url, async ) Especifica el tipo de solicitud
method : el tipo de solicitud: GET o POST
url : la ubicación del archivo
async : verdadero (asynchronous) o falsa (synchronous)
send() Envía una petición al servidor (used for GET)
send( string ) Envía una cadena de petición al servidor (used for POST)
onreadystatechange Una función que se llamará cuando cambia la propiedad readyState
readyState El estado de la XMLHttpRequest
0: solicitud no inicializado
1: conexión del servidor estableció
2: solicitud recibida
3: Solicitud de procesamiento
4: solicitar acabado y la respuesta está listo
status 200: OK
404 Pagina no encontrada
responseText Los datos de respuesta como una cadena
responseXML Los datos de respuesta como datos XML

El acceso entre dominios

Por razones de seguridad, los navegadores modernos no permiten el acceso a través de dominios.

Esto significa que tanto la página web y el archivo XML que intenta cargar, deben estar ubicados en el mismo servidor.

Los ejemplos de w3ii todos los archivos XML abiertos situados en el dominio w3ii.

Si desea utilizar el ejemplo anterior en una de sus propias páginas web, los archivos XML que cargue deben estar ubicados en su propio servidor.


La propiedad responseText

La propiedad responseText devuelve la respuesta como una cadena.

Si desea utilizar la respuesta como una cadena de texto, utilice la propiedad responseText:

Ejemplo

document.getElementById("demo").innerHTML = xmlhttp.responseText;
Inténtalo tú mismo "

La propiedad responseXML

La propiedad responseXML devuelve la respuesta como un objeto DOM XML.

Si desea utilizar la respuesta como un objeto DOM XML, utilice la propiedad responseXML:

Ejemplo

Solicitar el archivo cd_catalog.xml y utilizar la respuesta como un objeto DOM XML:

xmlDoc = xmlhttp.responseXML;
txt = "";
x = xmlDoc.getElementsByTagName("ARTIST");
for (i = 0; i < x.length; i++) {
    txt += x[i].childNodes[0].nodeValue + "<br>";
}
document.getElementById("demo").innerHTML = txt;
Inténtalo tú mismo "

GET o POST?

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

Sin embargo, siempre use las peticiones POST cuando:

  • Un archivo almacenado en caché no es una opción (update a file or database on the server)
  • El envío de una gran cantidad de datos al servidor (POST no tiene limitaciones de tamaño)
  • Envío de entrada del usuario (which can contain unknown characters) , POST es más robusta y segura que LLEGAR

La url - un archivo en un servidor

El parámetro url del open() método, es una dirección a un archivo en un servidor:

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

El archivo puede ser cualquier tipo de archivo, como .txt y .xml o los archivos de secuencias de comandos de servidor como .asp y .php (que puede llevar a cabo acciones en el servidor antes de enviar la respuesta de vuelta).


Asíncrono - Verdadero o Falso?

Para enviar la solicitud de forma asíncrona, el parámetro asíncrono del open() método tiene que ser establecido en true:

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

El envío de solicitudes de forma asíncrona es una gran mejora para los desarrolladores web. Muchas de las tareas que se realizan en el servidor son mucho tiempo.

Mediante el envío de forma asíncrona, el código JavaScript no tiene que esperar a la respuesta del servidor, sino que puede:

  • ejecutar otros scripts a la espera de respuesta del servidor
  • hacer frente a la respuesta cuando la respuesta está listo

Async = true

Cuando se utiliza async = true, especificar la función que se ejecutará cuando la respuesta está listo en caso onreadystatechange:

Ejemplo

xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
       document.getElementById("demo").innerHTML = xmlhttp.responseText;
    }
};
xmlhttp.open("GET", "xmlhttp_info.txt", true);
xmlhttp.send();
Inténtalo tú mismo "

Async = false

Para utilizar async = falso, cambie el tercer parámetro en el open() método en false:

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

El uso asíncrono = false no es recomendable, pero para algunos pedidos pequeños esto puede ser aceptable.

Recuerde que el JavaScript no continuará para ejecutar, hasta que la respuesta del servidor está listo. Si el servidor está ocupado o lento, la aplicación se cuelgue o se detiene.

Note: Cuando se utiliza async = falso, no escriba una función onreadystatechange - sólo hay que poner el código después de que el send() declaración:

Ejemplo

xmlhttp.open("GET", "xmlhttp_info.txt", false);
xmlhttp.send();
document.getElementById("demo").innerHTML = xmlhttp.responseText;
Inténtalo tú mismo "

Analizador XML

Todos los navegadores modernos tienen un analizador XML incorporado.

El modelo de objetos de documento XML (the XML DOM) contiene una gran cantidad de métodos para acceder y editar XML.

Sin embargo, antes se puede acceder a un documento XML, debe ser cargado en un objeto DOM XML.

Un analizador XML puede leer texto sin formato y convertirlo en un objeto DOM XML.


Analizar una cadena de texto

En este ejemplo se analiza una cadena de texto en un objeto DOM XML, y extrae la información de él con JavaScript:

Ejemplo

<html>
<body>

<p id="demo"></p>

<script>
var text, parser, xmlDoc;

text = "<bookstore><book>" +
"<title>Everyday Italian</title>" +
"<author>Giada De Laurentiis</author>" +
"<year>2005</year>" +
"</book></bookstore>";

parser = new DOMParser();
xmlDoc = parser.parseFromString(text,"text/xml");

document.getElementById("demo").innerHTML =
xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue;
</script>

</body>
</html>
Inténtalo tú mismo "

Los navegadores antiguos (IE5 and IE6)

Las versiones antiguas de Internet Explorer (IE5 and IE6) no son compatibles con el objeto XMLHttpRequest.

Para manejar IE5 y IE6, comprobar si el navegador es compatible con el objeto XMLHttpRequest, o bien crear una ActiveXObject:

Ejemplo

if (window.XMLHttpRequest) {
    // code for modern browsers
    xmlhttp = new XMLHttpRequest();
 } else {
    // code for old IE browsers
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
Inténtalo tú mismo "

Las versiones antiguas de Internet Explorer (IE5 and IE6) no son compatibles con el objeto DOMParser.

Para manejar IE5 y IE6, comprobar si el navegador es compatible con el objeto DOMParser, o bien crear una ActiveXObject:

Ejemplo

if (window.DOMParser) {
  // code for modern browsers
  parser = new DOMParser();
  xmlDoc = parser.parseFromString(text,"text/xml");
} else {
  // code for old IE browsers
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
  xmlDoc.async = false;
  xmlDoc.loadXML(text);
Inténtalo tú mismo "

Ejemplos

Más ejemplos

Recuperar información de cabecera con getAllResponseHeaders()
Recuperar información de la cabecera de un recurso (file) .

Recuperar información de cabecera específica con getResponseHeader()
Recuperar información de cabecera específica de un recurso (file) .

Recuperar el contenido de un archivo ASP
¿Cómo una página web puede comunicarse con un servidor web, mientras que unos caracteres de tipo de usuario en un campo de entrada.

Recuperar contenido de una base de datos
¿Cómo una página web puede recuperar información de una base de datos con el objeto XMLHttpRequest.

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