ERLEDIGT
NEIN
NEIN
ANTWORTEN
1
1
ZUGRIFFE
564
564
EMPFEHLEN
-
Guten Tag!
Ich habe mir einen kleinen Chat gebaut, welcher wunderbar funktioniert.
Ich möchte in der folgenden Funktion die Funktion loadchat() aufrufen, sodass er Chat nach dem Absenden neu geladen wird. Korioserweise habe ich immer entweder im FF oder im IE ein Problem. Die folgende Funktion funktioniert im IE super, nur der FF zeigt nach dem Absenden den Chat einfach nicht mehr an und lädt ihn dann nach einiger Zeit neu. Integriere ich in der folgenden Funktion nach dem Absenden loadchat() funktioniert es im FF super und der IE schickt überhaupt keine Daten mehr, zeigt aber den Chat an.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
function sendchat() { if (xmlHttp) { if (document.chat.mode.value == 'global') { xmlHttp.open('POST', 'include/sendchat.php'); xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xmlHttp .send('message=' + encodeURIComponent(document.chat.message.value) + '&mode=global'); } else if (document.chat.mode.value == 'alliance') { xmlHttp.open('POST', 'include/sendchat.php'); xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xmlHttp .send('message=' + encodeURIComponent(document.chat.message.value) + '&mode=alliance'); } document.chat.message.value = ''; document.chat.message.focus(); } }
Wenn ich aber nun den Aufruf der Funktion loadchat() am Anfang aufrufe funktioniert es, allerdings lädt er ja den Chat neu, bevor der neue Inhalt gespeichert wurde:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
function sendchat() { if (xmlHttp) { loadchat(); if (document.chat.mode.value == 'global') { xmlHttp.open('POST', 'include/sendchat.php'); xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xmlHttp.send('message=' + encodeURIComponent(document.chat.message.value) + '&mode=global'); } else if (document.chat.mode.value == 'alliance') { xmlHttp.open('POST', 'include/sendchat.php'); xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xmlHttp.send('message=' + encodeURIComponent(document.chat.message.value) + '&mode=alliance'); } document.chat.message.value = ''; document.chat.message.focus(); } }
So sieht mein kompletter Quelltext aus:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
var xmlHttp = false; try { xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { xmlHttp = false; } } if (!xmlHttp && typeof XMLHttpRequest != 'undefined') { xmlHttp = new XMLHttpRequest(); } loadchat(); setInterval("loadchat()", 5000); function loadchat() { if (xmlHttp) { if (document.chat.mode.value == 'global') { xmlHttp.open('GET', 'include/loadchat.php?mode=global', true); var validity = new Date(); validity = new Date(validity.getTime() + 1000 * 60 * 20); document.cookie = 'chat=global; expires=' + validity.toGMTString() + ';'; } else if (document.chat.mode.value == 'alliance') { xmlHttp.open('GET', 'include/loadchat.php?mode=alliance', true); var validity = new Date(); validity = new Date(validity.getTime() + 1000 * 60 * 20); document.cookie = 'chat=alliance; expires=' + validity.toGMTString() + ';'; } xmlHttp.onreadystatechange = function() { if (xmlHttp.readyState == 4) { if (xmlHttp.status == 200) { document.getElementById("chathistory").innerHTML = xmlHttp.responseText; } } }; xmlHttp.send(null); } } function sendchat() { if (xmlHttp) { if (document.chat.mode.value == 'global') { xmlHttp.open('POST', 'include/sendchat.php'); xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xmlHttp.send('message=' + encodeURIComponent(document.chat.message.value) + '&mode=global'); } else if (document.chat.mode.value == 'alliance') { xmlHttp.open('POST', 'include/sendchat.php'); xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xmlHttp.send('message=' + encodeURIComponent(document.chat.message.value) + '&mode=alliance'); } document.chat.message.value = ''; document.chat.message.focus(); } }Geändert von Sasser (28.02.10 um 00:06 Uhr)
-
1) Benutz ein JS-Framework wie jQuery, MooTools, ... Gibt's ja schließlich wegen der Browserproblemchen. Da hast du dann auch unkomplizierte Callbacks.
2) Benutz eine Push-Technik, sonst kannste das vergessen mit dem Chat. Das Stichwort heisst Comet. Als Applikationen gibt es da z.B. die AJAX Push Engine oder Lightstreamer. Letzteres noch nicht getestet. In den Google Libs müsste es da auch etwas zu geben und ich habe vor einiger Zeit mal von Plänen bei Dojo gehört, mich allerdings nicht weiter damit beschäftigt.
Eine Möglichkeit so etwas selbst zu machen ist z.B. einen unsichtbaren Iframe in die Seite zu integrieren, der nicht aufhört zu laden und in dem man dann immer wieder Script-Tags ausgibt, sobald es etwas neues gibt. Ist allerdings je nach Anwendungsgröße eine Performancetechnische katastrophe. Wenn man da nicht weiss was man tut sollte man eben oben beschriebene Fertiglösungen nehmen.....oder Javascript vergessen und auf *hust* Flash & Co. zurückgreifen.Geändert von Abro (14.03.10 um 23:16 Uhr)
Mit besten Grüßen, Abro.
~ Lucido Media, Internet- & Werbeagentur in Kerpen ~
Ähnliche Themen
-
Ajax/PHP Chat Problem
Von raage im Forum PHPAntworten: 7Letzter Beitrag: 21.01.10, 19:05 -
Chat mit Ajax ins bestehende Membersystem
Von aargau im Forum PHPAntworten: 5Letzter Beitrag: 06.04.09, 17:36 -
Ajax Chat Tutorial
Von Kurt Cobain im Forum Javascript & AjaxAntworten: 5Letzter Beitrag: 28.02.08, 21:42 -
Ajax Chat - Problem
Von frank24 im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 27.07.06, 17:30 -
Awaysystem für Ajax chat
Von wt-e im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 24.03.06, 04:18





Zitieren
Login





