Avatar billede RJFreelance Praktikant
13. februar 2009 - 20:13 Der er 16 kommentarer og
1 løsning

Opdatere et enkelt tal

Hej
Jeg har et tal, som står på en side der ikke opdateres på noget tidspunkt.
Dette tal vil jeg meget gerne have opdateret jævnligt, det vil sige at den skal tage noget fra en db og opdatere med.. Det med databasen og det er intet problem.
Problemet er hvordan jeg opdaterer dette tal, nemmest og med mindste serverforbrug. Og selvfølgelig uden blinken og klik lyde :)

På forhånd tak
Avatar billede Slater Ekspert
13. februar 2009 - 20:22 #1
Det lyder som om du skal bruge noget AJAX.

Jeg vil altid foreslå at bruge et Framework til det, da teknologien stadig er i sin barndom, og kan risikere at ændre sig. Det gør det samtidig også utrolig nemt.

Med Mootools kan du f.eks. nøjes med noget der ligner:

<div id="tal"></div>
<script type="text/javascript">
setInterval(function() {
  $('tal').load('hent_tal.php');
  }, 5000);
</script>

... og så i hent_tal.php skal den bare udskrive tallet med echo/print, som enhver anden PHP-fil.
Avatar billede RJFreelance Praktikant
13. februar 2009 - 20:23 #2
Og det der kræver intet specielt på serveren? For så må du gerne forklare det lidt nærmere, for så er det jo genialt :)
Avatar billede Slater Ekspert
13. februar 2009 - 20:34 #3
Nej, ikke andet end PHP. AJAX (i denne form) er bare Javascript, der sender et HTTP-request til serveren, og får dataene tilbage i Javascript, uden at resten af siden mærker noget til det, og naturligvis uden kliklyde og blinken ved opdatering, da intet opdaterer.

- Men naturligvis kræver det at brugeren har Javascript slået til, hvilket stort set alle har.
Avatar billede RJFreelance Praktikant
13. februar 2009 - 20:42 #4
Har lige testet det, og det fungerer jo genialt.. Mange tak..

Hvad ligger der ellers af lignende funktioner i den der mootools pakke? Hentede bare hele "coren".
Avatar billede Slater Ekspert
13. februar 2009 - 20:54 #5
Rigtig mange ting.

Kig f.eks. på:
http://mootools.net/docs/
http://demos.mootools.net
http://demos111.mootools.net

Det gør det bl.a. meget let at bruge AJAX, fade elementer glidende, lave animationer, smooth-scrolling, og lignende. Og så standardiserer det en masse ting, som man tidligere skulle skrive på forskellige måder til forskellige browsere.
Avatar billede RJFreelance Praktikant
13. februar 2009 - 20:54 #6
Hvordan kan jeg smide det i en body onload? Således at den loader det fra hent_tal.php når siden hentes og derefter med det mellemrum som jeg nu sætter. ?
Avatar billede Slater Ekspert
13. februar 2009 - 21:01 #7
I dette tilfælde ville jeg, hvis jeg var dig, bare sætte værdien med det samme i <div>'en.

Altså:
<div id="tal"><?php echo $tallets_startvaerdi; ?></div>
...

Men ellers bruger man stort set ikke onload i Mootools, men i stedet DomReady, som er bedre: den bliver udført så snart HTML'en er læst af browseren, men før billeder og andre unødvendige ting er loadet færdigt.

Bare til hvis du skal bruge det en anden gang, gøres det f.eks. sådan her:

<script type="text/javascript">
// Funktionen nu flyttet ud
function update_number() {
  $('tal').load('hent_tal.php');
}

// Set intervallet til hvert 5. sekund
setInterval(update_number(), 5000);

// Og start funktionen så snart dokumentet er loadet
window.addEvent('domready', function() {
  update_number();
});
</script>
Avatar billede RJFreelance Praktikant
13. februar 2009 - 22:18 #8
Det er helt perfekt :)
Har lige et tillægsspørgsmål, i samme ende som dette, som jeg håber du har tid til.

Jeg har en chat, der bliver opdateret via en skjult frame, innerhtml og opdatering af denne frame ofte.
Kan dette laves simplere via denne "core" ?

Således at jeg i selve mit "chat" vindue, kan hente de seneste linier og tilføje dem til mit div?
Avatar billede Slater Ekspert
13. februar 2009 - 22:50 #9
Det kan sagtens laves smartere og mere båndbredde-venligt, ja.

Den simple løsning er at lave det stort set som ovenover, hvor du bare laver div'en større og udskriver chattens indhold der. Det giver dog ikke den store fordel over en iframe.
Bedre er at lave en rigtig Request ( http://mootools.net/docs/Request/Request.HTML ), gemme et ID på den nuværende linje i chatten, kun hente linjer hjem der er nyere end det, og så tilføje dem til div'en.

Alt dette kan du også lave med din skjulte iframe, men det bliver lidt lettere på denne måde.

Et request der henter de nyeste værdier, kunne f.eks. se sådan ud:

new Request.HTML({
  url: 'chat_indhold.php',
  onSuccess: function(a, b, c) {
      alert(c);
  }
}).send();

- i sin simpleste form. Variablen "c" indeholder så teksten du henter, og den kan du sætte ind andre steder.
Avatar billede RJFreelance Praktikant
14. februar 2009 - 13:39 #10
Jeg prøver det :) Tak..

Ved du hvordan det kan være at når jeg laver en "load" af en side, ind i et div, så bliver æ, ø, å bare til spørgsmålstegn? Er der et sted at man skal sætte tegnsættet i mootools kernen?
Avatar billede Slater Ekspert
14. februar 2009 - 14:38 #11
Desværre er denne form for AJAX 7-bit, så danske tegn osv. kan ikke overføres på nogen måde. Det er lidt ærgerligt, men det betyder bare at du skal køre funktionen htmlentities() på al indholdstekst i PHP'en.
Den gør at specialtegn bliver oversat til HTML-koder, så "å" bliver til "&aring;", osv.
- Men husk ikke at køre den på HTML-koder, da de så også bliver vist synligt for brugeren.
Avatar billede Slater Ekspert
14. februar 2009 - 14:39 #12
- Hvis det er besværligt, kan du også lave en bedre funktion, der kun oversætter de danske tegn, så den ikke forstyrrer andet. Sig til hvis du har problemer.
Avatar billede RJFreelance Praktikant
14. februar 2009 - 15:09 #13
Hvor skal jeg så encode det, og hvor skal jeg decode det?
Avatar billede Slater Ekspert
14. februar 2009 - 15:40 #14
Du behøver ikke decode det nogensinde - det gør browseren selv.
Du skal bare encode det før det bliver sendt via AJAX.

Dvs. hvis du har a.php, med AJAX-kaldet:
$('indhold').load('b.php');

Og i b.php vil du gerne have noget tekst sendt fra en database, f.eks.:
<?php
echo '<p>', htmlentities($row['tekst']) ,'</p>';
?>

- Hvis du ikke vil have det ud af en database, men teksten bare står direkte i et html-dokument, så er det nok nemmere bare at skrive specialtegnene med det samme.

Altså i stedet for at skrive "rå æblegrød", skriver du "rå æblegrød".
Ja, det ser forfærdeligt ud, men for det meste er der ikke så mange specialtegn tæt sammen ;)
Avatar billede Slater Ekspert
14. februar 2009 - 15:41 #15
Flot, Eksperten - den oversatte sgu specialtegnene når jeg postede indlægget, men den gjorde det ikke da jeg previewede. Dårligt kodet.

Anyway - i stedet for "rå æblegrød", så "r%aring; %aelig;blegr%oslash;d" - hvor %-tegnene skal udskiftes med &-tegn.
Avatar billede RJFreelance Praktikant
15. februar 2009 - 17:11 #16
Det lyder godt :) Det er ihvertfald værd at huske når man arbejder med ajax så. Du må meget gerne smide et svar så :)
Avatar billede RJFreelance Praktikant
15. februar 2009 - 17:12 #17
Man skal lige vænne sig til deres nye system :) Tak
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