AJAX basierter Chat läuft nur im Firefox
Hallo.
Ich habe es nun endlich geschafft, einen Chat mit Hilfe von AJAX zu Programmieren.
Leider läuft dieser nur im Firefox.
Vielleicht ist ja der ein oder andere JavaScript Experte unter euch, der mir den ein oder
anderen Tipp geben kann, wie ich den Cht auch in anderen Browsern (v.a. IE!) zum
laufen bekomme.
Was haltete ihr generell von meinem Script bezüglich Performance? Ich denke da vor allem
an das Problem, dass immer alle Einträge neu vom Server generiert werden und dann
im Sekundentakt an die User ausgeliefert werden... ...was könnte ich da verbessern?
Freue mich auf eure Antworten!
Ich habe es nun endlich geschafft, einen Chat mit Hilfe von AJAX zu Programmieren.
Leider läuft dieser nur im Firefox.
Vielleicht ist ja der ein oder andere JavaScript Experte unter euch, der mir den ein oder
anderen Tipp geben kann, wie ich den Cht auch in anderen Browsern (v.a. IE!) zum
laufen bekomme.
Was haltete ihr generell von meinem Script bezüglich Performance? Ich denke da vor allem
an das Problem, dass immer alle Einträge neu vom Server generiert werden und dann
im Sekundentakt an die User ausgeliefert werden... ...was könnte ich da verbessern?
Freue mich auf eure Antworten!
<script type="text/javascript">
if (window.XMLHttpRequest)
{
xmlObject = new XMLHttpRequest(); // Mozilla, Safari, Opera
}
else if (window.ActiveXObject)
{
try
{
xmlObject = new ActiveXObject('Msxml2.XMLHTTP'); // IE 5
}
catch (e)
{
try
{
xmlObject = new ActiveXObject('Microsoft.XMLHTTP'); // IE 6
}
catch (e)
{
//
}
}
}
function loadContent()
{
xmlObject.open('get','getdata.php');
xmlObject.onreadystatechange = genOutput;
xmlObject.send(null);
}
function genOutput()
{
if(xmlObject.readyState == 4)
{
if (xmlObject.status == 200)
{
document.getElementById('Content').innerHTML = xmlObject.responseText;
}
}
}
function sendMessage()
{
var username = document.chat.username.value;
var message = document.chat.message.value;
xmlObject.open('post', 'create_message.php');
xmlObject.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xmlObject.onreadystatechange = interpretRequest;
xmlObject.send("username="+escape(username)+"&message="+escape(message));
}
function interpretRequest()
{
if (xmlObject.status != 200)
{
alert("Fehler bei der Übermittlung");
}
loadContent();
}
setInterval('loadContent()', 1000)
</script>
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 132482
Url: https://administrator.de/contentid/132482
Ausgedruckt am: 22.11.2024 um 14:11 Uhr
2 Kommentare
Neuester Kommentar
Statt das AJAX-Rad neu zu erfinden, solltest du vielleicht ein JavaScript-Framework wie jQuery nutzen, das u.a. komfortabel zu nutzende AJAX-Funktionen bereitstellt, ohne daß du dich selbst um Cross-Browser-Kompatibilität kümmern mußt.
Statt immer die kompletten Daten neu zu übertragen, kannst du ja mit dem Request den Timestamp oder irgendeine Form von ID der zuletzt empfangenen Nachricht mit übergeben, sodaß immer nur die neuen Einträge übertragen werden. Statt die innerHTML-Eigenschaft direkt zu setzen, kannst du stattdessen z.B. ein <div> mit dem neuen Inhalt in das Elternobjekt einhängen, wenn du diesen DIVs entsprechende IDs zuweist, kannst du dann auch alte Einträge automatisch entfernen, sodaß der angezeigte Text nicht unendlich wächst, sondern stets z.B: nur die letzten 30 Minuten Konversation angezeigt werden.
Statt immer die kompletten Daten neu zu übertragen, kannst du ja mit dem Request den Timestamp oder irgendeine Form von ID der zuletzt empfangenen Nachricht mit übergeben, sodaß immer nur die neuen Einträge übertragen werden. Statt die innerHTML-Eigenschaft direkt zu setzen, kannst du stattdessen z.B. ein <div> mit dem neuen Inhalt in das Elternobjekt einhängen, wenn du diesen DIVs entsprechende IDs zuweist, kannst du dann auch alte Einträge automatisch entfernen, sodaß der angezeigte Text nicht unendlich wächst, sondern stets z.B: nur die letzten 30 Minuten Konversation angezeigt werden.