¿Cómo activar una solicitud AJAX periódicamente?
<meta http-equiv="Refresh" Content="5">
Este script recarga o actualiza la página cada 5 segundos. Pero quiero hacerlo usando jQuery y llamada AJAX. ¿Es posible?
Como otros han señalado, setInterval y setTimeout funcionarán. Quería resaltar una técnica un poco más avanzada que aprendí en este excelente video de Paul Irish: http://paulirish.com/2010/10-things-i-learned-from-the-jquery-source/
Para tareas periódicas que podrían tardar más que el intervalo de repetición (como una solicitud HTTP en una conexión lenta), es mejor no usar setInterval()
. Si la primera solicitud no se ha completado e inicia otra, podría terminar en una situación en la que tenga múltiples solicitudes que consuman recursos compartidos y se mueran de hambre entre sí. Puede evitar este problema esperando para programar la siguiente solicitud hasta que se haya completado la última:
// Use a named immediately-invoked function expression.
(function worker() {
$.get('ajax/test.html', function(data) {
// Now that we've completed the request schedule the next one.
$('.result').html(data);
setTimeout(worker, 5000);
});
})();
Para simplificar, utilicé la devolución de llamada exitosa para programar. La desventaja de esto es que una solicitud fallida detendrá las actualizaciones. Para evitar esto, puedes utilizar la devolución de llamada completa:
(function worker() {
$.ajax({
url: 'ajax/test.html',
success: function(data) {
$('.result').html(data);
},
complete: function() {
// Schedule the next request when the current one's complete
setTimeout(worker, 5000);
}
});
})();
Sí, puede utilizar el setTimeout()
método JavaScript o setInterval()
el método para invocar el código que desea ejecutar. Así es como puedes hacerlo con setTimeout:
function executeQuery() {
$.ajax({
url: 'url/path/here',
success: function(data) {
// do something with the return value here if you like
}
});
setTimeout(executeQuery, 5000); // you could choose not to continue on failure...
}
$(document).ready(function() {
// run the first time; all subsequent calls will take care of themselves
setTimeout(executeQuery, 5000);
});