Tråd: JAVASCRIPT AJAX / jQuery, chat
View Single Post
Hello!
Jeg driver og fantaserer om å lage en egen felleschat som kan brukes av f.eks. gjester på en nettside.
Jeg har nå fått til en PHP-funksjon som leverer teksten i chatten ved å:

functions.php:

Kode

//Funksjon for å printe ut meldingene.
<?php
function printmessages($chatroom) {
if(!isset($chatroom) || empty($chatroom)) {
  $chatroom="public";
}

$query = "SELECT message,recipient,target,date FROM `messages` WHERE `target`='$chatroom' ORDER BY id ASC";
$query=mysqli_query($mysqli,$query);

 while($row=mysqli_fetch_array($query)) {

   echo "<div id='name'>$row[recipient] <br /></div>

   <div id='date'>$row[date] <br /></div>

   <div id='message'>$row[message] <br /></div>";

 }

}
?>
Jeg gjør oppmerksom på at koden overfor ikke er den nøyaktige koden, den er skrevet i full fart for å tegne en illustrasjon av hvordan jeg gjør det. Jeg prøver fremdeles meg fram med å bruke f.eks. echo printmesages($target) og så videre.

getmessages.php:

Kode

<?php

$chatroom="public";
require_once("functions.php");
printmessages($chatroom);

?>
I filen index.php trenger jeg en funksjon som henter frem chat-teksten en gang i sekundet eller lignende. Dette har jeg funnet via google og prøvd å bruke hittil. Jeg vet ikke om dette er AJAX eller jQuery eller hva det heter, kanskje dere kan fortelle meg det, det ville vært nyttig.

Jeg benytter meg av et template som er laget av noen andre, en CSS-fil og en HTML-fil. Det vil si at jeg ikke har så mye kontroll over hva som er definert for alle div-ene, det skal jeg få undersøkt også, men som jeg oppfatter det, er det bootstrap som ligger til grunn, og så er alt generelt satt opp svært grunnleggende og enkelt. Det vil si at det ikke er jeg som har laget div-en som heter "content. Div id messages er ikke definert i CSS-filen.

index.php:

Kode

<div id="content">
<script>
    $(document).ready(function(){
        setInterval(function() {
            $("#messages").load("getmessages.php");
        }, 1000);
    });
</script>

<div id="messages"></div>
</div>
Dette har fungert bra, meldingene blir hentet en gang i sekundet, og chatten fungerer bra! Den kodesnutten ligger i en div som heter "content".

Det er bare det at jeg egentlig ønsker å forholde meg til kun functions.php når jeg skal hente chat-teksten. Det vil si noe slikt som functions.php?function=getmessages.

Da er jeg sannsynligvis nødt til å legge noe sånt som dette i functions.php.

Kode

//Sjekke om funksjonen har lov av meg til å kjøre.
function allowedfunction($f) {

   if ($f=="getmessages") {
     return 1;
   } else {
     return 0;
   }

}

//Hvis funksjonen finnes og har lov av meg til å kjøre, så skal den kjøre.

if(function_exists($_GET['function']) && allowedfunction($_GET['function']) {
   $_GET['f']();
}
Jeg antar også at det da vil være mulig å erstatte lenken getmessages.php i javascript-elementet mitt med functions.php?function=printmessages:

Kode

<script>
    $(document).ready(function(){
        setInterval(function() {
            $("#messages").load("functions.php?function=printmessages&room=public");
        }, 1000);
    });
</script>
Dette har jeg imidlertid ikke prøvd enda, ettersom jeg har et annet problem jeg vil få undersøkt og løst først. Kanskje dere har noen tips.

Når det kommer nye meldinger inn i chatten, og javascript-koden henter meldingene frem, så scroller den dessverre ikke ned til nyeste melding automatisk. Meldingene legger seg under div-en, og er ikke synlig før man eventuelt er bevisst på å scrolle ned hver gang.

Dessuten skulle jeg gjerne ha funnet en måte å hente frem / vise kun de siste 30 meldingene, med mindre brukeren selv ønsker å scrolle oppover i samtalen for å hente eldre meldinger enn de siste 30. Dette kunne jeg selvfølgelig gjort i PHP, ved å legge inn LIMIT 30 i spørringen, men jeg kan tenke for meg at dette vil hindre brukeren i å hente frem flere meldinger om han scroller oppover... Derfor må det kanskje være Javascript som ligger til grunn?

Er det noen som ønsker å komme med tips? Jeg tar gjerne imot tilbakemeldinger om PHP-koden også.

I dag tenkte jeg å se på en annen ting, og det er å bruke javascript til å skrive ut meldingene, fremfor å bruke HTML-kode i en PHP-funksjon. Jeg så noen søketreff på Google hvor noen printet ut JSON-verdier som ble hentet frem fra MySQL via PHP. Det kan jeg tenke for meg å gjøre, men det å lagre hver eneste melding i JSON-format tar kanskje mye ressurser fra serveren?