Los últimos tutoriales de desarrollo web
 

AJAX - El Evento onreadystatechange


El evento onreadystatechange

Cuando una petición a un servidor se envía, queremos realizar algunas acciones sobre la base de la respuesta.

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

La propiedad readyState mantiene el estado de la XMLHttpRequest.

Tres importantes propiedades del objeto XMLHttpRequest:

Propiedad Descripción
onreadystatechange Almacena una función (o el nombre de una función) que se llamará automáticamente cada vez que cambia la propiedad readyState
readyState Ejerce en el estado de la XMLHttpRequest. 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
status 200: "OK"
404 Pagina no encontrada

En el caso onreadystatechange, especificamos lo que va a suceder cuando la respuesta del servidor está listo para ser procesado.

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

Ejemplo

function loadDoc() {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
  if (xhttp.readyState == 4 && xhttp.status == 200) {
    document.getElementById("demo").innerHTML = xhttp.responseText;
  }
};
Inténtalo tú mismo "

Nota: El evento se dispara onreadystatechange cinco veces (0-4), una vez para cada cambio en readyState.


Utilizar una función de devolución de llamada

Una función de devolución de llamada es una función que se pasa como parámetro a otra función.

Si usted tiene más de una tarea AJAX en su sitio web, debe crear una función estándar para crear el objeto XMLHttpRequest, y llamar a esto para cada tarea AJAX.

La llamada a la función debe contener la URL y qué hacer en onreadystatechange (que probablemente es diferente para cada llamada):

Ejemplo

function loadDoc(cFunc) {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
  if (xhttp.readyState == 4 && xhttp.status == 200) {
    cFunc(xhttp);
  }
Inténtalo tú mismo "