2009-09-04 15 views
5

¿Cómo implementar un "similar a Gmail" que tarda demasiado "warning message usando jQuery Ajax API?Implementando el mensaje "esto está tardando demasiado" con jQuery

Para aquellos que nunca han visto este mensaje en gmail, aparece cuando el proceso de "inicio de sesión" tarda demasiado en completarse, y luego se sugieren algunas soluciones.

Estoy usando jQuery Ajax en mi sitio web y quiero advertir a los usuarios cuando la carga de la página es muy lenta y sugerir algunas soluciones (un enlace para actualizar la página o una página de ayuda, por ejemplo).

Respuesta

14

me gustaría sugerir algo tan simple como este arreglo:

function tooLong() { 
    // What should we do when something's taking too long? Perhaps show a `<div>` with some instructions? 
    $("#this-is-taking-too-long").show(); 
} 

// Then, when you're about to perform an action: 
function performSomeAction() { 
    var timer = setTimeout(tooLong, 10000); 
    $.get('/foo/bar.php', {}, function() { 
     // Success! 
     clearTimeout(timer); 
    }); 
} 
+0

El argumento para clearTimeout debería ser el valor de retorno de setTimeout (el mango temporizador), no es el método que se invoca cuando el temporizador expira. – tvanfosson

+0

En realidad, 'clearTimeout' espera la identificación de tiempo de espera, no el objeto de función como lo tiene aquí. – kangax

+0

He entendido la lógica y el arreglo de tiempo de espera, pero ¿cómo funciona setTimeout y en qué casos es aplicable? No pude encontrarlo en la documentación de jQuery. – fjsj

2

Por qué no utilizar el incorporado en jQuery ajax 'timeout' option. Es una buena práctica usarlo de todos modos, en caso de que tenga problemas con su llamada ajax. O bien, podría reinventar la rueda;)

editar: y, creo, querría unir eso con una función de error.

+1

+1 si ya está utilizando el método $ .ajax que permite una devolución de llamada de error. Si, de lo contrario, usa get/load/post y solo quiere que esto sea un mensaje demasiado largo, entonces usar set/clearTimeout sería aceptable. – tvanfosson

+0

También puede usar el método $ .ajaxSetup, que afectará todas las llamadas ajax. – jonstjohn

+1

Tenga en cuenta que el error de tiempo de espera dentro de $ .ajax realmente dejará de buscar una respuesta del servidor, como resultado sería "esto no podría ser procesado" en oposición a lo que el OP quería decir que es "esto está tomando demasiado largo". – jakeisonline

Cuestiones relacionadas