<meta http-equiv="Refresh" Content="5">
Ten skrypt ponownie ładuje lub odświeża stronę co 5 sekund. Ale chcę to zrobić za pomocą jQuery i wywołania AJAX. Czy to możliwe?
Jak zauważyli inni, setInterval i setTimeout załatwią sprawę. Chciałem podkreślić nieco bardziej zaawansowaną technikę, której nauczyłem się z tego doskonałego filmu Paula Irisha: http://paulirish.com/2010/10-things-i-learned-from-the-jquery-source/
W przypadku zadań okresowych, które mogą zająć więcej czasu niż interwał powtarzania (np. Żądanie HTTP przy wolnym połączeniu), najlepiej nie używać setInterval()
. Jeśli pierwsze żądanie nie zostało zakończone i rozpoczniesz kolejne, możesz skończyć w sytuacji, w której masz wiele żądań, które pochłaniają udostępnione zasoby i nawzajem głodują. Możesz uniknąć tego problemu, czekając na zaplanowanie następnego żądania, aż do zakończenia ostatniego:
// 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);
});
})();
Dla uproszczenia użyłem wywołania zwrotnego sukcesu do planowania. Wadą tego jest to, że jedno nieudane żądanie zatrzyma aktualizacje. Aby tego uniknąć, możesz zamiast tego użyć pełnego wywołania zwrotnego:
(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);
}
});
})();
Tak, możesz użyć
setTimeout()
metody lubsetInterval()
metody JavaScript , aby wywołać kod, który chcesz uruchomić. Oto, jak możesz to zrobić za pomocą setTimeout:źródło
Możesz użyć
setTimeout
lubsetInterval
.Różnica polega na tym, że setTimeout wyzwala Twoją funkcję tylko raz, a następnie musisz ustawić ją ponownie. setInterval ciągle wyzwala wyrażenie, chyba że każesz mu się zatrzymać
źródło
Wypróbowałem poniższy kod,
Nie działało to zgodnie z oczekiwaniami w określonym przedziale czasu, strona nie załadowała się całkowicie, a funkcja była wywoływana w sposób ciągły. Lepiej zadzwonić na
setTimeout(executeQuery, 5000);
zewnątrzexecuteQuery()
w osobnej funkcji, jak poniżej,To działało dokładnie tak, jak powinno.
źródło