Un EJemplo de AJAX con vanilla JavaScript
() translation by (you can also view the original English article)
Siguiendo con nuestra introducción a AJAX, aquí está un ejemplo que usa el objeto XMLHttpRequest API para inicializar una solicitud AJAX.
Ejemplo de AJAX
De un vistazo a la siguiente estructura:
1 |
<div>
|
2 |
<img src="Einstein.jpg" alt="Einstein"> |
3 |
<button id="request">Learn more about Einstein</button> |
4 |
<div id="bio"></div> |
5 |
</div>
|
Además, considere la visualización relacionada:

Aquí está lo que queremos que pase: cuando hagamos clic sobre el botón, una solicitud AJAX será ejecutada. Luego, el elemento con el id bio
aparecerá y su contenido estará lleno con datos de respuesta. Ese dato es estático y está almacenado en el archivo Bio.txt
.
Nota: el archivo está cargado en el servidor Codepen. En esta forma, evitamos problemas de origen cruzados que puede ocurrir.
Debajo está el código AJAX que requerimos:
1 |
var btn = document.getElementById('request'); |
2 |
var bio = document.getElementById('bio'); |
3 |
|
4 |
var request = new XMLHttpRequest(); |
5 |
|
6 |
request.onreadystatechange = function() { |
7 |
if(request.readyState === 4) { |
8 |
bio.style.border = '1px solid #e8e8e8'; |
9 |
if(request.status === 200) { |
10 |
bio.innerHTML = request.responseText; |
11 |
} else { |
12 |
bio.innerHTML = 'An error occurred during your request: ' + request.status + ' ' + request.statusText; |
13 |
}
|
14 |
}
|
15 |
}
|
16 |
|
17 |
request.open('Get', 'Bio.txt'); |
18 |
|
19 |
btn.addEventListener('click', function() { |
20 |
this.style.display = 'none'; |
21 |
request.send(); |
22 |
});
|
Dividido en Pasos
Ahora vamos a describir los pasos para ésta solicitud:
-
Crear un objeto XMLHttpRequest.
-
Escribir la función que ejecutará cuando el servidor envíe devuelta el dato de respuesta. El objeto XMLHttpRequest tiene la propiedad
onreadystatechange
que guarda ésta función. Cada vez que el estado de la solicitud cambia, esta devolución de función es ejecutada. -
Monitorear algunas otras propiedades del objeto XMLHttpRequest. Primero, la propiedad
readyState
específica el estado de nuestra solicitud. A través de AJAX llama a su cambio de valor y puede recibir valores desde0
hasta4
(por ejemplo, el valor4
significa que el dato de respuesta está disponible para nosotros). Segundo, la propiedadstatus
indica si la solicitud requerida es exitosa o no (por ejemplo,el valor200
define una solicitud exitosa). En este ejemplo, asumiendo que recuperamos el dato de respuesta y que la llamada AJAX es exitosa, actualizamos el contenido del elemento destino. De lo contrario, mostramos un mensaje con información extraída desde el objeto XMLHttpRequest. -
Especificar el tipo de solicitud usando el método
open
. Este método acepta dos parámetros requerido y tres opcionales. El primer parámetro requerido define el método HTTP (por ejemplo,GET
oPOST
). El segundo determina la URL para la cual enviaremos la solicitud. Opcionalmente, pasamos un tercer parámetro booleano que indica si la solicitud es asíncrono (por ejemplo, el valor por defectotrue
) o síncrono. Los otros dos parámetros opcionales, pueden ser usados para propósitos de autentificación. -
Enviar una solicitud cuando el botón es presionado a través del método
send
. Además, en éste punto ocultamos el botón.
Nota: Si en verdad necesita soporte para una versión muy antigua de Internet Explorer (por ejemplo, IE6 o inferior) usted tiene que crear una instancia del objeto ActiveXObject
(vea la sección Paso 1).
La siguiente visualización muestra el cuerpo de nuestra solicitud como ésta se imprime en la consola del navegador.

El demo final luce como este:

Por otra parte, si solicitamos un archivo que no existe, veremos un mensaje similar al siguiente:

Nota: si ejecuta el ejemplo desde su ambiente local (y guarda el archivo Bio.txt
en él) el mensaje de error probablemente será diferente. Por ejemplo, podría ver el siguiente resultado:

Aquí está incorporado el código Codepen:
Conclusión
En este tutorial exploramos como podemos implementar un sencilla solicitud de AJAX usando JavaScript.
En la siguiente parte de la serie, nos concentraremos en la funciones y métodos AJAX relacionadas con jQuery. Luego, en la parte final de la serie, trabajaremos con uno o más ejemplos complicados. Así que; ¡manténgase atento!