Chat: nur neue Zeilen laden
lima-city → Forum → Die eigene Homepage → HTML, CSS & Javascript
code
dank
date
dokument
element
funktion
http
intervall
laden
last
log
message
null
opus
output
safari
server
status
url
zeile
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
du merkst dir einfach die ID der zuletzt geladenene Zeile, dann kannst du beim Laden alle danach eingetragenen Einträge laden und diese von Javascript anzeigen lassen ;)
Also JS soll sich die ID merken ;) -
Ja, die gibt es.
Das funktioniert normalerweise so: du Lädst am Anfang einmal alle Zeilen vom Server herunter.
Danach machst du z.B. mit XmlHttpRequests jeweils eine Abfrage ob eine neue Zeile nach der letzten die du am Client hast vorhanden ist und wenn ja lässt du sie dir zuschicken. Die hängst du dann an deinen Log an.
Ich hab sowas zufälligerweise schon mal geschrieben, hier etwas Code:
Die Funktion chatUpdate enthält alles, was nötig ist, um eine Zeile zu laden (das ist nur ein Beispiel!!!).var lastid = 0; function chatUpdate() { if(!loggedin) return; var request = createXMLHttpRequest(); request.onreadystatechange = function() { if((request.readyState == 4) && (request.status == 200)) { var output = document.getElementById('history'); if(request.responseXML == null) return; var doc = request.responseXML; try { var root = doc.getElementsByTagName('response')[0]; var status = root.getElementsByTagName('status')[0]; var statuscode = status.getElementsByTagName('code')[0].firstChild.data; var statustext = status.getElementsByTagName('text')[0].firstChild.data; if(statuscode != 0) { output.innerHTML = statustext; return; } setTimeout('chatUpdate();', 2000); if(root.getElementsByTagName('lastid') == null) return; if(root.getElementsByTagName('lastid')[0] == null) return; if(root.getElementsByTagName('lastid')[0].firstChild == null) return; lastid = parseInt(root.getElementsByTagName('lastid')[0].firstChild.data); var data = root.getElementsByTagName('data')[0]; var entries = data.getElementsByTagName('entry'); if(entries != null) { for(var i = 0; i < entries.length; i++) { var time = entries[i].getElementsByTagName('time')[0].firstChild.data; var user = entries[i].getElementsByTagName('user')[0].firstChild.data; var message = entries[i].getElementsByTagName('message')[0].firstChild.data; var element = document.createElement("div"); var node = document.createTextNode(time + " " + user + "> " + message); element.appendChild(node); output.appendChild(element); } } } catch(e) { output.innerHTML = e; } } } request.open("GET", "db.php?get&last=" + lastid + "&" + new Date().getTime(), true); request.send(); } function createXMLHttpRequest() { if(window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari return new XMLHttpRequest(); } else { // code for IE6, IE5 return new ActiveXObject("Microsoft.XMLHTTP"); } }
Das ganze in Funktion kannst du dir hier ansehen.
Wie es funktioniert:
Die Funktion chatUpdate wird in einem Intervall aufgerufen. Jedes mal schickt sie an den Server die ID der letzten Zeile, die noch empfangen wurde. Der Server schaut, ob er weitere Zeilen hat, und wenn er welche hat, schickt er sie an den Client. Der hängt sie dann an den Log an. -
danke für den Code, das sieht allerdings ziemlich viel aus!
Wichtig ist mir der Bereich in dem die Anfrage an den Server geht und die Antwort gelesen wird. -
fuerderer schrieb:
Ist gar nicht so viel. Es wird nur die Rückgabe des Servers als XML weiterverarbeitet und der relevante Text (Chat-Meldungen) per DOM in das aktuelle Dokument eingefügt.
danke für den Code, das sieht allerdings ziemlich viel aus! -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage