13. februar 2009 - 20:13Der 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 :)
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
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:
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.
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.
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. ?
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>
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.
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?
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 "å", osv. - Men husk ikke at køre den på HTML-koder, da de så også bliver vist synligt for brugeren.
- 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.
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 ;)
Man skal lige vænne sig til deres nye system :) Tak
Synes godt om
Ny brugerNybegynder
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.