2011-06-09 14 views
9

He visto que puede especificar qué hacer generalmente si falla una solicitud ajax, ¿es posible hacer que intente nuevamente en algún tipo de bucle para que intente al menos x cantidad de veces antes de que se detenga? He utilizado este código antes:Probar automáticamente la solicitud AJAX nuevamente al Fail

$.ajaxSetup({ 
    "error":function() { 
    alert("error"); 
}}); 

que se aplicará a todas las solicitudes de AJAX (corríjanme si me equivoco).

quiero hacer algo como esto:

$.ajaxSetup({ 
    "error":function() { 
    $(this).ajax; 
}}); 
Would

este trabajo? O incluso mejor: ¿sería esta la forma correcta de hacerlo? Me gustaría envolver el reintento en un sistema de recuento para que no vuelva a intentarse infinitamente. En mi aplicación, 9 de cada 10 veces funcionará correctamente, pero de vez en cuando una de las API con las que estoy interactuando devolverá un error.

¡Cualquier sugerencia ayudaría, gracias!

+0

posible duplicado de [¿Cómo reenvío una solicitud ajax fallida?] (Http://stackoverflow.com/questions/8881614/how-do-i-resend-a-failed-ajax-request) – user2284570

Respuesta

13

Usted puede intentar algo como esto:

var attempts; 
    function doAjaxRequest() { 
     attempts = 0; 
     doAjaxRequestLoop(); 
    } 

    function doAjaxRequestLoop() { 
     attempts += 1; 
     if (attempts > 10) { 
      alert('too many attempts.'); 
      return; 
     } 

     $.ajax({ // do your request 
      error: function (error) { 
       doAjaxRequestLoop(); 
      } 
     }); 
    } 

</script> 

Aunque Me podría recomendar en contra de ella. Si la solicitud falla, es posible que desee averiguar por qué falló. ¿Qué pasa si el usuario pierde su conexión a Internet? Es probable que cualquier otro intento falle nuevamente, entonces, ¿por qué intentarlo nuevamente?

+2

Necesita llama a 'doAjaxRequestLoop' dentro de' doAjaxRequest'. En este momento, simplemente establece el valor en 0 y nunca hace nada. –

+0

¡Su derecha! Eso es lo que obtengo por tener prisa. Publicación actualizada – Jay

+0

Gracias! Entonces, por alguna razón, una de las API de cliente con las que estoy trabajando parece realmente endeble, la mayoría de las veces funciona, pero de vez en cuando se agota el tiempo de espera de una solicitud. Si pudiera intentarlo al menos una vez más, creo que eso lo haría lo suficientemente sólido. Creo que esta es una buena manera de hacerlo, gracias Jay –

Cuestiones relacionadas