jeg har en blog som bliver opdateret ret ofte, og tænkte derfor at det kunne være smart med en funktion der gjorde besøgende opmærksomme på at der var kommet et nyt indlæg på sitet hvis de har vinduet åbent men befinder sig andetsteds på sitet end forsiden, eller i et andet vindue. Jeg forestiller mig en 'Dong!' lyd.
Spørgsmålet er nu, hvordan ville I bære jer ad med dette?
Det virker ikke optimalt bare at bede forsiden (eller et skjult frame) at refreshe med jævne mellemrum og give lyd fra sig hvis den finder et nyt indlæg, så jeg går ud fra at det eneste alternativ er at bruge AJAX.
Er der nogen der kender en god tutorial der ville hjælpe med at opnå dette mål, eller har forslag der kan puffe mig i den rigtige retning?
Nek, grunden til at jeg gerne vil bruge AJAX er netop for at undgå sider der står og loader for evigt eller skal refreshes hele tiden. Hvis du ser på Digg Spy http://digg.com/spy kan du se hvor rart og flydende det kan blive. Ved bare ikke nok om AJAX til at vide hvor jeg skal starte.
Med din 'data bliver overført over et netværk' kunne man jo bare sætte siden til at refreshe hvert 2. sekund, men det ville nok ikke være optimalt da skærmen ville stå og blinke hele tiden. Desuden er der mulighed for at der ville være en konstant kliklyd fra IE skulle man af en eller anden mystisk årsag bruge denne browser.
Ved ikke helt om det er manglende viden om hvad AJAX kan der får dig til at mene at din løsning er lige så god, eller om du bare er ligeglad med at den er primitiv.
Vi er enige om at dit forslag på den side er nedenstående, ikke? <html opdater-hvert-minut-som-nødløsning> Vis alle beskeder i chatten... while(ingen beskeder){ wait(); } // Nu er der en ny besked i chatten udskriv en kommando til browseren til om at reloade siden. //Slut
Jo det er den løsning og nej har ikke selv brugt AJAX, men denne løsning er faktisk ret elegant.
Og nej den refresher ikke hele tiden. Den refresher når der er brug for det.
Når dit serverside program har genereret siden vil den ikke afslutte. I stedet vil den vente med at sende resten af siden. Resten af siden vil så indeholde en refresh kommando.
"Og nej den refresher ikke hele tiden. Den refresher når der er brug for det."
Det er en _rigtig_ skidt løsning, der kræver bunker af overflødige server-resourcer - hvorfor den metode aldrig bruges i seriøse applikationer. De sjældne gange, noget lignende ses anvendt, er der skrevet en speciel web-server til formålet.
Det eneste fornuftige er at bruge en Ajax-løsning. Det giver hurtig response, det tærer ekstremt lidt på serveren og det giver et ganske lavt 'trafik-forbrug'
Den løsning jeg beskriver blev brugt på tour de frances hjemmeside: letour.fr og de bruger apache som webserver. De bruger det til live at vise hvilke ryttere der har forspring så man kan desværre ikke se det nu.
Men altså det ville heller ikke være noget problem at implementere i en tomcat eller anden servlet container. Jeg har ikke implemeteret det selv, så jeg kan ikke sige hvordan hastigheden er, men jeg kan ikke se hvorfor det skulle være et problem
Tour de France? Var det ikke der hvor vinderen blev taget for doping? Giver ikke meget for deres organisation når de snyder så meget, og mon ikke det også gælder programmørerne? ^^
Det vil jeg meget gerne se dokumentation på blev brugt på letour.fr! Havde det været tilfældet, ville man lynhurtigt være kommet lysår på den forkerte side af Apache's grænse for samtidige forbindelser ... og det er kun for at nævne én enkelt ting.
Metoden er gammel og velkendt, men det undrer mig lidt, du ikke kan overskue, at det er en elendig løsning. Jeg ved ikke, hvad du ved om web og webservere, så jeg ved ikke rigtig, hvor jeg skal begynde med en forklaring :)
Jamen, det ville jeg da aldrig gøre med en browser, en server og HTTP-protokollen. Det er disse ting jo slet ikke konstrueret til :)
Der er tydeligvis en del ting, du ikke helt har forstået. Ajax er absolut ikke poppet - men den mulighed, du nu engang har for at hente data på en 'økonomisk' måde med jævnlige intervaller, når der er tale om en browser, en server og HTTP-protokollen. Det er ikke uden grund, WWW's største aktører bruger så megen energi på Ajax-baserede applikationer ;o)
- og jeg tør iøvrigt sætte 100 mod 1 på, at den applikation, du taler om, ikke bruger den metode, du forestiller dig ... og 90 mod 1 på, at der faktisk er tale om en Ajax-app ;o)
Jeg prøver at besvare spørgsmålet endnu engang ... jeg skrev: "Jamen, det ville jeg da aldrig gøre med en browser, en server og HTTP-protokollen. Det er disse ting jo slet ikke konstrueret til :)"
Du kan ikke med _nogen_ teknik undgå at skulle forespørge serveren med jævne mellemrum. Du kan ikke pushe data over HTTP ... de skal _hentes_ :)
Esben, tak for forslaget, men det har ingen interesse. Det er fint at se folk diskutere, men det kommer jeg ikke nærmere på en løsning af.
Jeg forsøger at finde nogle AJAX tutorials, og vender tilbage når/hvis jeg får lavet en løsning (med mindre der svinger nogen forbi og kommer med et svar på det originale spørgsmål).
Hmmm ... Ajax er vel lidt overkill. Du kan nøjes med at kalde et billede:
<script type="text/JavaScript"> var oCheckIm = null; function checkServer() { oCheckIm = new Image(); oCheckIm.onload = function() { if (oCheckIm.width>1) alert("Der er nyt på serveren ..."); checkServer(); } oCheckIm.src = "http://www.domain.dk/side.php"; } </script>
- og så skal funktionen naturligvis kaldes, når siden loader ... og der bør times. Ny JS-funktion:
<script type="text/JavaScript"> var oCheckIm = null; function checkServer() { oCheckIm = new Image(); oCheckIm.onload = function() { if (oCheckIm.width>1) alert("Der er nyt på serveren ..."); } oCheckIm.src = "http://www.domain.dk/side.php"; setTimeout("checkServer()", 10000); // Checker hvert 10. sekund } checkServer(); </script>
foxwell jeg prøver såmænd bare selv at blive klogere.
olebole jeg forstår ikke helt din løsning. Jeg kan se checkServer() kalder sig i uendelig recursion. Er det meningen? Står din løsning ikke bare og venter med en åben forbindelse indtil der er nyt på serveren?
esben > helt fint, det skal du også have lov til =)
ole > mange tak, jeg prøver at se om jeg kan få det til at fungere! =)
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.