Mostrando entradas con la etiqueta código. Mostrar todas las entradas
Mostrando entradas con la etiqueta código. Mostrar todas las entradas

viernes, 19 de septiembre de 2008

Cómo abortar un XmlHttpRequest al pasar cierto tiempo de espera

Aunque no venga al caso del estilo de este blog, voy a explicar esto, también como ayuda a mí mismo, ya que es una cosa que quería hacer hace mucho tiempo y me ha costado mucho encontrar la forma de efectuarlo.
Se trata de anular una petición asíncrona en AJAX al pasar cierto timeout, para que no se quede la capa o objeto de destino de la petición eternamente esperando algo que nunca llega. Así se puede informar al usuario de dicho error, y ayudarnos hasta a nosotros mismos a depurar la aplicación, así como liberar un recurso innecesario para el cliente, sobretodo si las peticiones AJAX se suceden cada cierto intérvalo, como era mi caso.
He aquí el truquito.
Dentro de la función que maneja el Ajax, tanto si es mediante Prototype como si no, podemos aplicar el siguiente código:

var timer=setTimeout(
function()
{
ajax.abort();
ajax.onreadystatechange=null;
alert('Opps! It seems your request has taked so many time, try again later');
},timeout);



Para que esta llamada no se ejecute siempre, pues así lo acabará haciendo, tanto si se procesa el readyState 4 como si no, lo que podemos hacer es añadir un clearTimeout(timer) en aquellos casos que sepamos que Ajax ha terminado, esto es cualquier lugar fuera del readyState 1.