Ajax Chat - Problem

frank24

Grünschnabel
Hi,

ich habe ein kleines Problem mit einem Chatroom. Ich benutzte PHP + Mysql um die Nachrichten zu speichern und Javascript um sie mittels Ajax zu versenden.
Alle 5 Sekunden gibt es einen autorefresh und wenn man eine Nachricht sendet wird zusätzlich refreshed (über Ajax).

Das ganze liegt auf einem Webserver, also nicht lokal bei mir.

Alles funktioniert soweit gut. Zumindest mit meinen Browern (MSIE 6 & Mozilla 5).

Gehe ich jetzt aber zu einem Freund and den Computer, der exakt die selbe Version des Browsers hat, gibt es folgenden Fehler:

Der Chatteilnehmer öffnet den Chat und Ihm werden die letzten 100 Nachrichten angezeigt. Bei mir ist es so, wie man es von einem normalen chat erwartet: ich schreibe eine Nachricht und sie kommt ein bisschen zeitverzögert im Chatfenster an. Bei einigen anderen ist es aber so, dass die Nachricht auch angezeigt wird, dann aber bei dem nächsten Autorefresh verschwindet und nurnoch der Text angezeigt wird der beim öffnen des Chatrooms schon angezeigt wurde. (die letzten 100 Zeilen)

Da es bei mir funktioniert kann es nicht am PHP Teil des ganzen liegen, da ich sonst auch unvollständige Chats bekommen würde, was nicht der Fall ist.

Ich vermute das es etwas mit cashing oder ähnlichem zu tun haben muss, finde aber keine Lösung. Teilweise hatte ich den Eindruck dass die POST bz. GET Methoden in unterscheidlichen Browsern besser funktionieren, aber das kann auch nur ein falschen gefühl gewesen sein.

Ich würde mich sehr freuen wenn mir jemand einen Tipp geben könnte, wie ich es hinbekomme das immer der gesamte bisherige Chatlog ausgegeben wird.

Vielen Dank

Hier sind nochmal die wichtigen Javafunktionen:

Code:
var partyID = <? echo $_REQUEST['pid']; ?>;
var serverID = <? echo $_REQUEST['sid']; ?>;
var charName = "<? echo urldecode($_REQUEST['name']); ?>";
var requestObject = false;
var sendMethod = "";
function createRequestObject() {
	try {
		requestObject = new XMLHttpRequest();
		sendMethod = "GET";
	} catch (trymicrosoft) {
		try {
			requestObject = new ActiveXObject("Msxml2.XMLHTTP");
			sendMethod = "POST";
		} catch (othermicrosoft) {
			try {
				requestObject = new ActiveXObject("Microsoft.XMLHTTP");
				sendMethod = "POST";
			} catch (failed) {
				requestObject = false;
			}
		}
	}
	if(!requestObject) {
		alert("Fehler beim Initialisieren des Chats!");
	}
}

function sendText(text) {
	if(requestObject) {
		var url = "";
		if(text=="" || text==null) {
			url = "chat.php?pid=" + partyID + "&sid=" + serverID + "&name=" + charName;
		} else {
			url = "chat.php?pid=" + partyID + "&sid=" + serverID + "&name=" + charName + "&msg=" + escape(text);
		}
		if(requestObject.overrideMimeType) {
			requestObject.overrideMimeType('text/xml');
		}
		requestObject.open(sendMethod, url, true);
		requestObject.onreadystatechange = updateChat;
		requestObject.send(null);
	} else {
		alert("requestObject not ready");
	}
}

function updateChat() {
	if(requestObject.readyState == 4 && requestObject.status == 200) {
		var chat = document.getElementById("chatWindow");
		var members = document.getElementById("chatMembers");
		var content = requestObject.responseText.split('|');
		members.innerHTML = "";
		chat.innerHTML = "";
		for(i=0; i<content.length-1; i++) {
			members.innerHTML += content[i] + "<BR>";
		}
		chat.innerHTML = content[i];
		chat.scrollTop = chat.scrollHeight;
	}
}
 
Die Vermutung mit dem Cache finde ich naheliegend, hate ein ähnliches Problem mit einer Statusanzeige die sich nicht verändert hat.
Versuche im PHP Script mal folgendes ganz oben...

PHP:
// bei mir hab ich XML gesendet... 
// header( "Content-type: text/xml" );
header( "Cache-Control: no-cache, must-revalidate" ); // HTTP/1.1
header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" );

Übrigens... was machste wenn ein User ein | im Namen hat, oder im Text postet ?
Wäre es nicht sinnvoller über XML zu gehen und dann den requestObject.responseXML auszulesen ?
 
Zuletzt bearbeitet:
Zurück