Avatar billede rix Novice
14. august 2010 - 20:37 Der er 1 løsning

HJÆLP til ajax chat

jeg har længe ville have en ajax chat til min hjemme side men da jeg ikke har den store forstand på ajax var det en umugligt  opgave for mig at lave

helt tilfældigt fandt jeg en tutorial som skulle være i to dele men kan kun finde den føste
og i den føste kan man ikke have sin egen bruger navn og man kan kun være i en rum :(
har så prøvet i en uge at lave så man kan have sin egen bruger navn ved hjælp af php session og dette skulle være sammen med XML men damm jeg kan ikke få det til at virke :( så nu har jeg brug for hjælp :D jer er lidt koder

føst den kode som laver chaten "altså så man kan sende og modtage mm. "


        <script language="JavaScript" type="text/javascript">
            var sendReq = getXmlHttpRequestObject();
            var receiveReq = getXmlHttpRequestObject();
            var lastMessage = 0;
            var mTimer;
            //Function for initializating the page.
            function startChat() {
                //Set the focus to the Message Box.
                document.getElementById('txt_message').focus();
                //Start Recieving Messages.
                getChatText();
            }       
            //Gets the browser specific XmlHttpRequest Object
            function getXmlHttpRequestObject() {
                if (window.XMLHttpRequest) {
                    return new XMLHttpRequest();
                } else if(window.ActiveXObject) {
                    return new ActiveXObject("Microsoft.XMLHTTP");
                } else {
                    document.getElementById('p_status').innerHTML = 'Status: Cound not create XmlHttpRequest Object.  Consider upgrading your browser.';
                }
            }
           
            //Gets the current messages from the server
            function getChatText() {
                if (receiveReq.readyState == 4 || receiveReq.readyState == 0) {
                    receiveReq.open("GET", 'getChat.php?chat=1&last=' + lastMessage, true);
                    receiveReq.onreadystatechange = handleReceiveChat;
                    receiveReq.send(null);
                }           
            }
            //Add a message to the chat server.
            function sendChatText() {
                if(document.getElementById('txt_message').value == '') {
                    alert("You have not entered a message");
                    return;
                }
                if (sendReq.readyState == 4 || sendReq.readyState == 0) {
                    sendReq.open("POST", 'getChat.php?chat=1&last=' + lastMessage, true);
                    sendReq.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
                    sendReq.onreadystatechange = handleSendChat;
                    var param = 'message=' + document.getElementById('txt_message').value;
                    param += '&name=Ryan Smith';
                    param += '&chat=1';
                    sendReq.send(param);
                    document.getElementById('txt_message').value = '';
                }                           
            }
            //When our message has been sent, update our page.
            function handleSendChat() {
                //Clear out the existing timer so we don't have
                //multiple timer instances running.
                clearInterval(mTimer);
                getChatText();
            }
            //Function for handling the return of chat text
            function handleReceiveChat() {
                if (receiveReq.readyState == 4) {
                    var chat_div = document.getElementById('div_chat');
                    var xmldoc = receiveReq.responseXML;
                    var message_nodes = xmldoc.getElementsByTagName("message");
                    var n_messages = message_nodes.length
                    for (i = 0; i < n_messages; i++) {
                        var user_node = message_nodes[i].getElementsByTagName("user");
                        var text_node = message_nodes[i].getElementsByTagName("text");
                        var time_node = message_nodes[i].getElementsByTagName("time");
                        chat_div.innerHTML += user_node[0].firstChild.nodeValue + ' ';
                        chat_div.innerHTML += '<font class="chat_time">' + time_node[0].firstChild.nodeValue + '</font><br />';
                        chat_div.innerHTML += text_node[0].firstChild.nodeValue + '<br />';
                        chat_div.scrollTop = chat_div.scrollHeight;
                        lastMessage = (message_nodes[i].getAttribute('id'));
                    }
                    mTimer = setTimeout('getChatText();',2000); //Refresh our chat in 2 seconds
                }
            }
            //This functions handles when the user presses enter.  Instead of submitting the form, we
            //send a new message to the server and return false.
            function blockSubmit() {
                sendChatText();
                return false;
            }
            //This cleans out the database so we can start a new chat session.
            function resetChat() {
                if (sendReq.readyState == 4 || sendReq.readyState == 0) {
                    sendReq.open("POST", 'getChat.php?chat=1&last=' + lastMessage, true);
                    sendReq.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
                    sendReq.onreadystatechange = handleResetChat;
                    var param = 'action=reset';
                    sendReq.send(param);
                    document.getElementById('txt_message').value = '';
                }                           
            }
            //This function handles the response after the page has been refreshed.
            function handleResetChat() {
                document.getElementById('div_chat').innerHTML = '';
                getChatText();
            }   
        </script>

og så der hvor den henter oplysninger henne og der jeg regner med at man skal lave så man kan bruge brugerens egen bruger navn

//Create the XML response.
$xml = '<?xml version="1.0" ?><root>';
//Check to ensure the user is in a chat room.
if(!isset($_GET['chat'])) {
    $xml .='Your are not currently in a chat session.  <a href="">Enter a chat session here</a>';
    $xml .= '<message id="0">';
    $xml .= '<user>Admin</user>';
    $xml .= '<text>Your are not currently in a chat session.  &lt;a href=""&gt;Enter a chat session here&lt;/a&gt;</text>';
    $xml .= '<time>' . date('h:i') . '</time>';
    $xml .= '</message>';
} else {
    $last = (isset($_GET['last']) && $_GET['last'] != '') ? $_GET['last'] : 0;
    $sql = "SELECT message_id, user_name, message, date_format(post_time, '%h:%i') as post_time" .
        " FROM message WHERE chat_id = " . db_input($_GET['chat']) . " AND message_id > " . $last;
    $message_query = db_query($sql);
    //Loop through each message and create an XML message node for each.
    while($message_array = db_fetch_array($message_query)) {
        $xml .= '<message id="' . $message_array['message_id'] . '">';
        $xml .= '<user>' . htmlspecialchars($message_array['user_name']) . '</user>';
        $xml .= '<text>' . htmlspecialchars($message_array['message']) . '</text>';
        $xml .= '<time>' . $message_array['post_time'] . '</time>';
        $xml .= '</message>';
    }
}
$xml .= '</root>';
echo $xml;


altså der hvor der står "  //Add a message to the chat server."
er der hvor den bla. poster bruger navn som nu er ryen smidt eller hvad det nu er :D


det er det jeg ville have ændret jeg regner med at bruge en session i XML delen
Avatar billede rix Novice
19. august 2010 - 19:07 #1
denner er vidst glemt :D
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester