IBGDB
Die Indie Browsergame Datenbank - Unabhängig & Ehrlich.
you are not logged in
Login

Ajax Datenbankabfrage alle 10 Sekunden

MonAMCESTECEST1AprE
Ajax Datenbankabfrage alle 10 Sekunden  

Vielleicht hat der Ein oder Andere auch schonmal danach gesucht wie man eine Datenbankabfrage alle x Sekunden wiederholen lässt, um dann z.B. den Status der Privatnachrichten abzufragen und gegebenfalls "Neue Nachricht erhalten anzeigen" ausgibt. Ich habe es nun erfolgrich eingebaut und werde den Code dazu mal posten. Vielleicht hilft es ja dem einen oder anderen.

Benötigt wird jquery. http://jquery.com/

Code für die index.php

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//DE"
       "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Index</title>
<script type="text/javascript" src="jquery-1.7.2.js"></script>
<script type="text/javascript">

var updateMsg=function(){

  $('#div_id').load('db_query.php',function(){

  theTimer=window.setTimeout(updateMsg,10000);

  });

}

var theTimer = window.setTimeout(updateMsg,10000);

</script>
</head>
<body>
  <div id="div_id"></div>
</body>
</html>

Code für die externe db_query.php

Übergabe der Session

inlude eurer db_connect.php oder halt nen normalen connect zu eurer Datenbank

Euer normales Query zum auslesen neuer Nachrichten

Ausgabe der Meldung

MonPMCESTECEST1AprE
 

ich würde da kein setTimeout reinsetzen und vor allem nicht in den header. setTimeout bedeutet warte 10 sekunden und führe danach eine funktion aus. in deinem fall, sieht man 10 sekunden lang keinen inhalt danach kommt ein ajax request und dann wird der rest nachgeladen. ich würde an deiner stelle ganz unten vor dem </body> folgendes hinschreiben:

 

<script type="text/javascript">

//Sobald HTML Geladen ist

$(function(){

var updateMsg = function(){

$('#div_id').load('db_query.php');

}

window.setInterval(updateMsg, 10000);

});

</script>

eventuell als result von der php datei einen json array zurückliefern und mit javascript HTML code generieren damit der server weniger zu tun hat. Achso Cros Site Request Forgery token müsste mal googlen

MonPMCESTECEST1AprE
 

Okay, ich habe das etwas unsauber gelöst bei mir das wenn eine Nachricht da ist, er diese anzeigt und das Script weglässt.

Danke für die Hilfe dazu.

ThuAMCESTECEST1MayE
 

Noch besser geht es mit dem Jquery Plugin Smartupdater. Sehr Pfiffig gelöst. Wird z.B. nur ausgeführt wenn das betreffende Element sichtbar ist. Außerdem gibt es einstellungsmöglichkeiten der die Updatezeit erhöht wenn sich nichts geändert hat.

http://www.eslinstructor.net/smartupdater/