Hallo,
derzeit versuche ich einen eigenen Chat zu entwickeln auf Basis von PHP, MySQL und Ajax. Im IE6 funktioniert alles wie es sein sollte, doch der Firefox (bei mir Vers. 2.0.0.13) bereitet Probleme:
Gibt man mehrere Zeilen hintereinander ein (meistens der Fall) - manchmal geschieht es aber auch schon beim ersten Versuch - lädt die ganze Seite plötzlich neu und an die url wird ein Fragezeichen angehangen. Statt "chat.php" steht dort also "chat.php?".
Der Chat ist bei Strato installiert, also nicht lokal. Leider fällt mir überhaupt nichts auf, was den Fehler verursachen könnte. So hoffe ich, dass ihr mir helfen könnt ;)
Folgendermaßen sieht der javascript-Code aus:
-----------------------------------------------
var xmlHttp=null;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
}
// aktuelle Daten laden
loadData();
// alle 3 Sekunden neue Daten holen
setInterval("loadData()",3000);
function loadData()
{
if (xmlHttp) {
xmlHttp.open('GET', 'getdata.php?latestID='+latestID, true);
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState == 4) {
// gekürzt, da es wohl den Rahmen sprengen würde. Mittels getdata.php wird
// ein String zurückgeliefert, welcher alle neuen Nachrichten sowie die
// aktuelle Nutzerliste beinhaltet.
}
};
xmlHttp.send(null);
}
}
function saveData()
{
if (xmlHttp) {
message = encodeURIComponent(document.getElementById("inputMessage").value);
var param='message=' + message;
xmlHttp.open("POST", "setdata.php", true);
xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlHttp.setRequestHeader("Content-length", param.length);
xmlHttp.setRequestHeader("Connection", "close");
// make the server request
xmlHttp.send(param);
}
// Message-Eingabefelder leeren und Focus setzen
document.getElementById("inputMessage").value = '';
document.getElementById("inputMessage").focus();
}
-----------------------------------------------
Mein bisheriger Gedanke war, dass sich das Speichern der neuen, geschriebenen Nachricht vielleicht mit dem Laden der Nachrichten aus der Datenbank überschneidet. Ein Verringern des Intervalls auf 1 Sekunde führt dazu, dass das Neuladen der Seite sofort ausgeführt wird. Ein Erhöhen des Intervalls lässt die Vermutung zumindest gut aussehen: der Fehler tritt nicht zu häufig auf. Das Schlechte daran ist natürlich, dass die Geschwindigkeit m.E. nicht mehr akzeptabel ist und der Fehler kann immernoch auftreten.
Wie kann man diesen Fehler beheben? Bei meiner Suche im Netz habe ich bislang nichts gefunden, was mich der Lösung näher brachte.
Gruß,
Christian