La creación de aplicaciones AJAX implica la aparición de nuevos tipos de errores y excepciones. Probablemente, el problema más importante sea el de realizar una petición al servidor y que este no responda en un periodo de tiempo razonable.
Aunque las peticiones se realizan de forma asíncrona y el usuario puede continuar utilizando la aplicación mientras se realiza la petición al servidor en un segundo plano, normalmente es necesario disponer de una respuesta rápida del servidor.
La función setTimeout() se puede emplear para establecer una cuenta atrás al iniciar una nueva petición. Si el servidor responde antes de que expire la cuenta atrás, se elimina esa cuenta atrás y se continúa con la ejecución normal de la aplicación. Si el servidor no responde y la cuenta atrás finaliza, se ejecuta una función encargada de detener la petición, reintentarla, mostrar un mensaje al usuario, etc.
// Variable global que almacena el identificador de la cuenta atrásvar cuentaAtras = null;var tiempoMaximo = 5000; // 5000 = 5 segundos function cargaContenido(url, metodo, funcion) { peticion_http = inicializa_xhr(); if(peticion_http) { // Establecer la cuenta atrás al realizar la petición HTTP cuentraAtras = setTimeout(expirada, tiempoMaximo); peticion_http.onreadystatechange = funcion; peticion_http.open(metodo, url, true); peticion_http.send(null); } } function muestraMensaje() { ... if(peticion_http.readyState == READY_STATE_COMPLETE) { if(peticion_http.status == 200) { // Si se ha recibido la respuesta del servidor, eliminar la cuenta atrás clearTimeout(cuentaAtras); ... } }} function expirada() { // La cuentra atrás se ha cumplido, detener la petición HTTP pendiente peticion_http.abort(); alert("Se ha producido un error en la comunicación con el servidor. Inténtalo un poco más adelante.");}
Además de la falta de respuesta del servidor, las aplicaciones AJAX deben estar preparadas para otros tipos de respuestas que pueden generar los servidores. El tipo de respuesta se comprueba mediante el valor del atributo status del objeto XMLHTTPRequest.
A continuación se muestran las tablas de los códigos de estado más comunes que pueden devolver los servidores:
Códigos de información
Códigos de petición y respuesta correctas
Códigos de redirección
Códigos de error del navegador
Códigos de error del servidor