Risposte:
Come altri hanno sottolineato, setInterval e setTimeout faranno il trucco. Volevo evidenziare una tecnica un po 'più avanzata che ho imparato da questo eccellente video di Paul Irish: http://paulirish.com/2010/10-things-i-learned-from-the-jquery-source/
Per le attività periodiche che potrebbero richiedere più tempo dell'intervallo di ripetizione (come una richiesta HTTP su una connessione lenta) è meglio non utilizzarlo setInterval()
. Se la prima richiesta non è stata completata e ne inizi un'altra, potresti finire in una situazione in cui hai più richieste che consumano risorse condivise e si affamano a vicenda. Puoi evitare questo problema aspettando di programmare la richiesta successiva fino al completamento dell'ultima:
// 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);
});
})();
Per semplicità ho utilizzato il callback di successo per la pianificazione. Il lato negativo di questo è che una richiesta non riuscita interromperà gli aggiornamenti. Per evitare ciò è possibile utilizzare invece la richiamata 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ì, puoi utilizzare il setTimeout()
metodo o il setInterval()
metodo JavaScript per richiamare il codice che desideri eseguire. Ecco come potresti farlo 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);
});
Ho provato il codice seguente,
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);
});
Questo non ha funzionato come previsto per l'intervallo specificato, la pagina non è stata caricata completamente e la funzione è stata chiamata continuamente. È meglio chiamare setTimeout(executeQuery, 5000);
all'esterno executeQuery()
in una funzione separata come di seguito,
function executeQuery() {
$.ajax({
url: 'url/path/here',
success: function(data) {
// do something with the return value here if you like
}
});
updateCall();
}
function updateCall(){
setTimeout(function(){executeQuery()}, 5000);
}
$(document).ready(function() {
executeQuery();
});
Ha funzionato esattamente come previsto.