2008-10-21 23 views
16

¿Cómo se hace una auto-actualización de div con JavaScript (específicamente, jQuery)?Div auto-refrescante con jQuery - setTimeout u otro método?

Conozco el método setTimeout, pero ¿es realmente una buena práctica? hay algun metodo mejor?

function update() { 
    $.get("response.php", function(data) { 
     $("#some_div").html(data); 
    }); 
    window.setTimeout("update();", 10000); 
} 

Respuesta

40

Otra modificación:

function update() { 
    $.get("response.php", function(data) { 
    $("#some_div").html(data); 
    window.setTimeout(update, 10000); 
    }); 
} 

La diferencia con este es que se espera 10 segundos después de la llamada Ajax es uno. Entonces realmente el tiempo entre las actualizaciones es de 10 segundos + duración de la llamada ajax. El beneficio de esto es que si su servidor tarda más de 10 segundos en responder, no se producen dos (y finalmente, muchas) llamadas AJAX simultáneas.

Además, si el servidor no responde, no seguirá intentándolo.

he utilizado un método similar en el pasado usando .ajax para manejar el comportamiento aún más complejo:

function update() { 
    $("#notice_div").html('Loading..'); 
    $.ajax({ 
    type: 'GET', 
    url: 'response.php', 
    timeout: 2000, 
    success: function(data) { 
     $("#some_div").html(data); 
     $("#notice_div").html(''); 
     window.setTimeout(update, 10000); 
    }, 
    error: function (XMLHttpRequest, textStatus, errorThrown) { 
     $("#notice_div").html('Timeout contacting server..'); 
     window.setTimeout(update, 60000); 
    } 
} 

Esto muestra un mensaje de carga durante la carga de (poner un gif animado en él durante típica web" 2.0 "estilo". Si el servidor expira (en este caso tarda más de 2 segundos) o se produce cualquier otro tipo de error, muestra un error y espera 60 segundos antes de volver a ponerse en contacto con el servidor.

Esto puede ser especialmente beneficioso cuando se realizan actualizaciones rápidas con un mayor número de usuarios, donde no se desea que todos dejen inválido a un servidor rezagado con solicitudes que simplemente se acaban.

+0

gracias. Estaba buscando algo así como la opción loadInterval de Spry para jQuery, pero esto sería genial. Gracias otra véz. – andyk

3

There's a jQuery Timer plugin es posible que desee probar

+0

gracias, esto definitivamente es más limpio y el intervalo de reinicio haría una buena adición. – andyk

2
function update() { 
    $("#notice_div").html('Loading..'); 
    $.ajax({ 
    type: 'GET', 
    url: 'jbede.php', 
    timeout: 2000, 
    success: function(data) { 
     $("#some_div").html(data); 
     $("#notice_div").html(''); 
     window.setTimeout(update, 10000); 
    }, 
    error: function (XMLHttpRequest, textStatus, errorThrown) { 
     $("#notice_div").html('Timeout contacting server..'); 
     window.setTimeout(update, 60000); 
    } 
}); 
} 
$(document).ready(function() { 
    update(); 
}); 

Esto es mejor Código

7
$(document).ready(function() { 
    $.ajaxSetup({ cache: false }); // This part addresses an IE bug. without it, IE will only load the first number and will never refresh 
    setInterval(function() { 
    $('#notice_div').load('response.php'); 
    }, 3000); // the "3000" 
}); 
+0

Muy simple y funcionó muy bien. – bloparod

Cuestiones relacionadas