<meta http-equiv="Refresh" Content="5">
Dieses Skript lädt die Seite alle 5 Sekunden neu oder aktualisiert sie. Aber ich möchte es mit jQuery und AJAX aufrufen. Ist es möglich?
Wie andere bereits betont haben, werden setInterval und setTimeout den Trick machen. Ich wollte eine etwas fortgeschrittenere Technik hervorheben, die ich aus diesem hervorragenden Video von Paul Irish gelernt habe: http://paulirish.com/2010/10-things-i-learned-from-the-jquery-source/
Für periodische Aufgaben, die möglicherweise länger als das Wiederholungsintervall dauern (wie eine HTTP-Anforderung bei einer langsamen Verbindung), ist es am besten, sie nicht zu verwenden setInterval()
. Wenn die erste Anforderung nicht abgeschlossen ist und Sie eine andere starten, kann es vorkommen, dass Sie mehrere Anforderungen haben, die gemeinsam genutzte Ressourcen verbrauchen und sich gegenseitig verhungern lassen. Sie können dieses Problem vermeiden, indem Sie warten, bis die letzte Anforderung abgeschlossen ist:
// 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);
});
})();
Der Einfachheit halber habe ich den Erfolgsrückruf für die Planung verwendet. Die Kehrseite davon ist, dass eine fehlgeschlagene Anforderung Aktualisierungen stoppt. Um dies zu vermeiden, können Sie stattdessen den vollständigen Rückruf verwenden:
(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);
}
});
})();
Ja, Sie können entweder die JavaScript-
setTimeout()
Methode oder die JavaScript- MethodesetInterval()
verwenden, um den Code aufzurufen, den Sie ausführen möchten. So können Sie es mit setTimeout machen:quelle
Sie können
setTimeout
oder verwendensetInterval
.Der Unterschied besteht darin, dass setTimeout Ihre Funktion nur einmal auslöst und Sie sie dann erneut einstellen müssen. setInterval löst immer wieder einen Ausdruck aus, es sei denn, Sie weisen ihn an, anzuhalten
quelle
Ich habe den folgenden Code ausprobiert:
Dies funktionierte für das angegebene Intervall nicht wie erwartet, die Seite wurde nicht vollständig geladen und die Funktion wurde kontinuierlich aufgerufen. Es ist besser,
setTimeout(executeQuery, 5000);
draußenexecuteQuery()
in einer separaten Funktion wie unten aufzurufen.Dies funktionierte genau wie beabsichtigt.
quelle