tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
1
ZUGRIFFE
600
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    frank24 frank24 ist offline Grünschnabel
    Registriert seit
    Jul 2006
    Beiträge
    1
    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 :
    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
    56
    57
    58
    59
    60
    
    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;
        }
    }
     

  2. #2
    Avatar von Exceptionfault
    Exceptionfault Exceptionfault ist offline Mitglied Brokat
    Registriert seit
    Sep 2004
    Ort
    Neckarsulm
    Beiträge
    348
    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-Code:
    // 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 ?
    Geändert von Exceptionfault (27.07.06 um 17:36 Uhr)
     
    liebe Grüße
    Exceptionfault (http://exceptionfault.de)

    Never say: "Always"! Always say: "Never say never"! - Tom Kyte @ Ask Tom Live in Berlin 2008

Ähnliche Themen

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