Kære udviklere,
Jeg har i mange forsøg prøvet at opbygge en chat, hvor det kun er indholdet som bliver reloadet efter svar fra databasen. Det har fungeret fint med jQuery, i at loade efter x antal sekunder.
Men dette er problematisk da det vil overbelaste siden, og vil aldrig kunne blive funktionel. Så derfor læste jeg mig frem til at man kan gøre dette vha. Ajax.
Det har jeg også fået til at virke. Den viser alle chat-beskeder som er blevet postet til databasen, samt den tilføjer en besked såfremt man sender den - uden at den reloader siden, den reloader kun div'en. Det fungerer fint.
Men mit spørgsmål lyder på at jeg gerne vil have den til at reloade selvom at der er en person som skriver i chatten fra en anden computer - hvor den så på alles computer reloader chattens indhold / tilføjer den nyeste besked.
Min Ajax kode ser således ud:
- function sendMsg()
- {
- var str = document.getElementById('msg').value;
-
- if (str=="")
- {
- document.getElementById("txtHint").innerHTML="";
- return;
- }
-
- if (window.XMLHttpRequest)
- {
- xmlhttp=new XMLHttpRequest();
- }
- else
- {
- xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
- }
-
- xmlhttp.onreadystatechange = function()
- {
- if (xmlhttp.readyState==4 && xmlhttp.status==200)
- {
- document.getElementById("chat").innerHTML=xmlhttp.responseText;
- }
- }
- xmlhttp.open("GET","send.php?msg="+str,true);
- xmlhttp.send();
-
- document.getElementById('msg').value = "";
- }
PHP koden ser således ud:
- if(isset($_GET["msg"]))
- {
- $q = $_GET["msg"];
- }
-
- $con = mysql_connect('localhost', 'root', '');
- if (!$con)
- {
- die('Could not connect: ' . mysql_error());
- }
-
- mysql_select_db("chat", $con);
-
-
- if(isset($q))
- {
- $start = mysql_query("INSERT INTO messages VALUES ('', '".$q."')");
- if(empty($q) ? false : $start);
- }
-
- $sqlGET = "SELECT * FROM messages ORDER BY id";
-
- $resultGET = mysql_query($sqlGET);
-
- echo "<table style=\"width: 400px;\" id=\"table\" cellspacing=\"0\">";
-
- while($rowGET = mysql_fetch_array($resultGET))
- {
- echo "<tr>";
- echo "<td>Admin:</td>";
- echo "<td>" . $rowGET['besked'] . "</td>";
- echo "</tr>";
- }
-
- echo "</table>";
-
- mysql_close($con);
HTML koden ser således ud:
- <div id="chat"><?php require_once("send.php"); ?></div>
- <form onsubmit="return false;">
- <input type="text" id="msg" name="msg" /><br />
- <input type="button" id="send" onClick="sendMsg()" value="send" />
- </form>
Jeg håber at i forstår mit spørgsmål - ellers, så spørg endelig
.
Indlæg senest redigeret d. 25.01.2012 21:17 af Bruger #16025