Prüfen, ob MySQL Datensatz der selbe beim Autorefresh

lisali

Erfahrenes Mitglied
Hallo,

ich wollte einen bestimmten Bereich auf der Profilseite eines Mitglieds immer nur dann erneuern/refreshen, wenn die Ausgabe sich verändert.

Bisher realisiere ich das so mit JQuery:

Code:
var auto_refresh = setInterval(
	function()
	{
	$("div#browsing").fadeOut('slow').load("<? echo "browsing.php?s=browse&id=".$_GET['id'].""; ?>").fadeIn("normal");
		}, 5000);
	}

So wird alle 5 Sekunden der aktuelle Inhalt der Datei "browsing.php" geladen. Jetzt möchte ich jedoch nur dann laden, wenn eben auch die Ausgabe sich geändert hat.

Ich habe da folgendes konstruiert, was aber noch nicht klappt und man erweitern müsste:

Code:
<script>
$(document).ready(function()
{
	// Anzeige, wo sich das Mitglied gerade befindet (bei jedem Update)
	var auto_refresh = setInterval(
	function()
	{
	<? 
	# --- Query des Mitglieds in Variable speichern:
	$get = mysql_fetch_array(mysql_query("SELECT query FROM `users` WHERE id='".$_GET['id']."'")); 
	?>
	var last_query = "<? echo $get[query]; ?>";

	if (last_query != query){
		$("div#browsing").fadeOut('slow').load("<? echo "browsing.php?s=browse&id=".$_GET['id'].""; ?>").fadeIn("normal");
		}, 2000);
	}
});
</script>

Bin dankbar für jede Hilfe!

Liebe Grüße,

Lisa
 
Mir würde es auch reichen, wenn vielleicht jemand ein paar Denkanstöße dafür hätte, um das zu realisieren! Wäre sehr dankbar!

Liebe Grüße,

Lisa
 
Hi,

was du mit
Code:
$(document).ready(function(){...}
konstruierst, wird ja dann ausgeführt, wenn das Dokument oder zumindest seine Struktur geladen wurde - also beim Neuladen eines Dokuments. Damit ist eine Überprüfung der Daten hinfällig, da sowieso die aktuellsten geladen und angezeigt werden müssen/sollen.

Ist das Dokument bereits geladen und du möchtest es nur aktualisieren, wenn sich aktuell etwas geändert hat, wirst du ebenfalls nicht um einen Request herumkommen. Denn irgendwoher muss der Client (Browser) ja wissen, wie die Daten auf dem Server gerade aussehen. Es wird also immer auf eine periodische Abfrage, wie du sie bereits implementiert hast, hinauslaufen.

Willst du vermeiden, dass die Fadefunktion ausgeführt wird, wenn sich der Inhalt nicht ändert, könntest du auf eine andere Ajax-Funktion zurückgreifen - z.B. post. Anhand einer globalen Variable, die den zuletzt angeforderten Inhalt speichert, kannst du entscheiden, ob das Element geändert werden muss oder nicht.

Beispiel:
Code:
<html>
<head>
<title>www.tutorials.de</title>
<script src="http://code.jquery.com/jquery-latest.pack.js" type="text/javascript"></script>
<script type="text/javascript">
<!--
var strOld = null;

function moreNews(){
  $.post('request.php?'+new Date().getTime(), function(resp){
    var strResp = unescape(resp);

    if((strOld == null) || (strOld != strResp)){
      $('#newsID').fadeOut('slow', function(){
        $(this).html(strResp).fadeIn('slow');
      });
      strOld = strResp;
    }
  });
}
-->
</script>
</head>
<body>
<button onclick="moreNews();">neues?</button>
<div id="newsID">Neuigkeiten</div>
</body>
</html>

Getestet habe ich es mit folgender PHP-Datei (request.php):
Code:
<?php
$arrRnd = array("Inhalt 1", "Inhalt 2", "Inhalt 3", "Inhalt 4", "Inhalt 5", "Inhalt 6");

srand ( (double)microtime () * 1000000 );
$intRnd = rand (0, 5);

echo(rawurlencode($arrRnd[$intRnd]));
?>

Vielleicht hilft dir das weiter.

Ciao
Quaese
 
Danke für deinen Beitrag! Leider muss ich zugeben, dass ich da nicht so ganz durchsteige. Also, ich habe es auch mal probiert, aber habe keine Ausgabe, wenn ich den Button klicke.

Woran könnte das denn liegen? Also, ich habe selbstverständlich alles eingebunden.

Liebe Grüße,

Lisa
 
Moin,

wenn du statt load() ....$.ajax() verwendest, kannst du über die Option ifModified regeln, ob der Request bei unveränderten Daten zum Erfolg führt oder nicht.

Du müsstest dann allerdings das Laden des Inhaltes in das Zielelement selbst über eine Callback-Funktion erledigen.
 
Und wie genau funktioniert das? Liest JQuery dann aus, ob der Inhalt der PHP Datei sich geändert hat anhand der Anzeige oder Größe oder wie genau?

LG,

Lisa
 

Neue Beiträge

Zurück