letzte Aktion des Users speichern

Steusi

Nasenbär
Hallo Leute,

mein Fachwissen in JavaScript ist leider begrenzt, da ich meist im backend programmiere.

Ich würde gerne eine Webseite alle 10 Minuten neu laden, aber nur wenn der User gerade nichts macht, sprich nicht gerade ein Formular ausfüllt oder ähnliches. Erreichen möchte ich damit, das die Daten aus der Datenbank "quasi" im Hintergrund ständig aktuell auf der Website präsent sind.

Die Webseite haben bestimmte User den ganzen Tag auf, und gucken ab und zu mal schnell rauf, ob es neue Infos gibt, doch jetzt müsste man jedes Mal erst die Seite aktualisieren.

Kann man so etwas mit JS realisieren?
 
Eigentlich musst du gar nicht die Seite neuladen! Wie wäre es mit AJAX?
Damit kannst du dynamisch (ohne Reload) Daten in die Website reinladen.

Das ist viel leichter, denn das Rausfinden, ob der User gerade nichts macht, würde sich meiner Meinung nach komplexer gestalten.
 
AJAX habe ich größtenteils für Fomulare genutzt, das wenn etwas ausgewählt wurde eine weitere Datenbankabfrage daran geknüpft wurde, womit ich automatisch andere Formularfelder gefüllt habe.

Aber AJAX kann man sicher auch zeitlich ansteuern, dann könnte ich das Request im Hintergrund an die Seite senden. Also ein Ansatz ist es Wert. Falls jemand eine guten Tipp dazu hat, immer her damit :-)
 
Für sich zeitlich wiederholende Vorgänge gibt es die Funktion setInterval().
Mal ein beispielhafter Code:
Javascript:
window.onload = function()
{
  window.setInterval("UpdateSite()", 600000); // alle 10 Minuten
}
function UpdateSite()
{
  MakeAJAXRequest();
}
 
Zuletzt bearbeitet:
Erkennen, ob der User was macht, würde ich über mousemove und keydown.
Hab mal schnell was gehackt.

HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html id="html" xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
<head>
	<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
	
	<title>Reload wenn User nichts macht</title>
</head>

<body>
	<script type="text/javascript">
	/* <![CDATA[ */
	window.onload = function() {
		var
			userActionWait = 10000,//Es müssen mindestens 10 Sekunden nach der letzten User Tat vergehen
			minWait = 600000,//Es müssen mindestens 10 Minuten vergehen, bevor überhaupt nachgeladen wird
			lastUserAction = new Date();
		
		function canReload() {
			var now = new Date();
			
			//Ist genug Zeit verstrichen?
			return (now.getTime() - lastUserAction.getTime()) >= userActionWait;
		}
		
		document.onmousemove = document.onkeydown = function() {
			lastUserAction = new Date();
		};
		
		//Der Timer für die 10 Minuten
		window.setTimeout(function() {
			//Prüfen, ob Seite neu geladen werden kann
			if(canReload()) {
				window.location.reload(true);
				return;
			}
			
			//Scheinbar macht der Nutzer gerade etwas, also nicht neu laden. Stattdessen prüfen wir sekündlich ob wir jetzt endlich können.
			var timer = window.setInterval(function() {
				if(canReload()) {
					window.clearInterval(timer);
					window.location.reload(true);
				}
			}, 1000);
		}, minWait);
	};
	/* ]]> */
	</script>
</body>

</html>
 
Das geht natürlich auch.
Aber was ist, wenn der User gerade aufgehalten worden ist und dann plötzlich beim ein Reload gemacht wird? Dann sind die Daten in dem Formular erstmal weg.
Wenn man stattdessen AJAX nimmt, dann kann man die Daten aus DB im Hintergrund holen und in die Website einfügen, ohne das die Forumlare o.Ä. davon irgendwas "mitbekommen".
 
Du könntest auch statt die Seite neu zu laden den Nutzer nur darauf hinweisen dass es etwas neues gibt. Dies kannst du einfach per ajax machen und der Nutzer kann sich (warum auch immer) dafür entscheiden die Seite später neu zu laden.
 
Zurück