tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
1
ZUGRIFFE
564
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Sasser Sasser ist offline Mitglied Smaragd
    Registriert seit
    Mar 2008
    Beiträge
    1.000
    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)
     

  2. #2
    Abro Abro ist offline Mitglied Bronze
    Registriert seit
    Mar 2004
    Ort
    Sauerland (NRW)
    Beiträge
    43
    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

  1. Ajax/PHP Chat Problem
    Von raage im Forum PHP
    Antworten: 7
    Letzter Beitrag: 21.01.10, 19:05
  2. Antworten: 5
    Letzter Beitrag: 06.04.09, 17:36
  3. Ajax Chat Tutorial
    Von Kurt Cobain im Forum Javascript & Ajax
    Antworten: 5
    Letzter Beitrag: 28.02.08, 21:42
  4. Ajax Chat - Problem
    Von frank24 im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 27.07.06, 17:30
  5. Awaysystem für Ajax chat
    Von wt-e im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 24.03.06, 04:18