01. februar 2008 - 19:57Der er
40 kommentarer og 1 løsning
Ajax opdatering
Hejsa,
Jeg vil gerne have noget ajax i min kode. Det det skal gøre er at opdatere en lille top hvori der står noget om lyttertal og hvilken sang der bliver afspillet.
Så jeg ville høre om der var en herude der vil hjælpe mig med at lave det (Skal lige siges at jeg ikke aner det mindste om Ajax! :)), eller vidersende mig til et link hvor man kan lære det.
Det kræver du finder du frameworks. <script src="prototype.js" type="text/javascript"></script> <script src="scriptaculous.js" type="text/javascript"></script>
Det handler ikke om, hvad jeg 'kan lide' eller 'ikke kan lide'. Det handler om god eller dårlig kode - samt om valid eller invalid kode - og her lever framework'et ikke op til mindstemålene :)
Desværre har jeg stadig til gode at se et, der er skrevet i valid, tidssvarende kode - og som ikke lækker mængder af unødig hukommelse i IE.
Derudover har jeg svært ved at se den store forskel på - eller fordelene ved - at sætte sig ind i et framework's struktur og syntaks i forhold til at sætte sig ind i XMLHttpRequest/DOM. Bevares, det sidste kræver en lidt større indsats, men giver til gengæld betydelig større fleksibillitet.
De store problemer ligger under alle omstændigheder i IE's elendige garbage collection, som det kræver en hel del erfaring og et 'arktisk' overblik at kode sig udenom.
Min anbefaling er derfor at lære en masse om de bagvedliggende teknologier - (X)HTML, XMLHttpRequest, JavaScript, DOM, CSS og XML/JSON - og så begynde på Ajax. Man kan så evt. skrive sine egne wrappers og små-libs, som er tilpasset ens egen kodestil og sædvanlige opgavetyper.
Det står ikke skrevet, at alle webteknikker skal være tilgængelige for alle - uden væsentlig indsats. Alle kan købe et keyboard og lære at akkompagnere sig selv ... det tager tid, slid og slæb at blve koncertpianist :)
jakobdo > Det ser faktisk ud som om det er lige præcis sådan et det er jeg ville kunne bruge! :D
For det er faktisk kun lige i toppen, hvor der står ect.
Antal lyttere: xx/xx Sangen skal stå her DJ navn
Og så er der jo en media spiller, så hvis man opdaterer for at se evt. sang navn, eller hvor mange der lytter, så stopper musikken jo, og det er det jeg gerne vil undgå ved at have ajax der opdaterer toppen så snart der skiftes sang/lytterantal :)
Data bliver skrevet ud med innerHTML, som hører til i midthalvfemser kode - aldrig har været valid - og ofte spænder ben for implementering af moderne JavaScript/DOM kode. Da jeg ofte ender op i heftige debatter om emnet, har jeg skrevet denne her :) http://www.dengodekode.dk/artikler/DOM/no_innerhtml.php
- og jeg skal naturligvis ikke undlade at nævne, at der generelt kun er fordele ved at skrive tidssvarende, valid og hensigtsmæssig kode. Hvis man ikke bekymrer sig om at skrive valid script/DOM, er det vanskelligt at se, hvorfor man skulle bekymre sig omkring validiteten af HTML- og CSS-koden ... og det er de fleste jo ellers vældig optaget af ;o)
Nu har den virket i 1 dag ca., og den er begyndt at komme med fejlen: Lyttere: 56/500 Kanye West - Stronger 58,1,71,500,56,56,Kanye West - Stronger,HTTP/1.0 200 OK content-type:text/html Admin Page is Busy. Waiting 4 Seconds.
Kan det være fordi at den ikke kan rumme mere i sin hukommelse e.l.?
Ajax'et brugte ca. 100 kbps, og fik mit site suspenderet til 01 i nat. Det jeg vil gøre, er så at ændre frequency: 1, til frequency: 60, så den opdaterer hvert minut, istedet for hvert sekund.
- som en- og decoder JSON. Så kan man sende data i et serialiseret array eller objekt til serveren i en enkelt POST-variabel.
På serveren bruges efterfølgende: $postObject = json_decode( $_POST["variabel_navn"] );
- hvorefter objektet (eller array'et) kan bruges som et alm. PHP-objekt.
I øvrigt kan JSON med fordel bruges til serialisation af PHP-objekter og arrays - f.eks. ved indsættelse i DB. JSON kan bruges til meget andet end Ajax ;o)
Jeg er midt i en artikelserie om Ajax til Prosa. Når den er afsluttet, rammer de samme artikler www.dengodekode.dk i en lidt udvidet version. Derefter er det planen at udvide endnu mere og udgive hele 'librettoen' som bog (250-300 sider), hvilket allerede er godt igang.
Der er rigtig mange faldbruber i Ajax/DOM, og en bog er nok den bedste og mest realistiske måde at komme omkring alle (eller i det mindste de fleste) aspekter. Naturligvis kunne jeg nok fortælle det hele i gratis, online artikler/tutorials - meeeeen der må også være grænser for filantropien. Det er et stort arbejde, så modellen bliver: "noget er gratis - resten vil jeg betales for" :)
oVars er tiltænkt et objekt af variabler: new AjaxReq("POST", sUrl, {"var_1":"bla", "var_2":"blabla"}, myCallBack);
Objektet konverteres til en query-streng med: var aQuery = []; for (var x in oVars) aQuery.push( encodeURIComponent(x) + "=" + encodeURIComponent(oVars[x]) );
- og sendes med: oHttp.send( aQuery.join("&") );
Variablerne vil på serveren så være at finde som $_POST["var_1"] og $_POST["var_2"]
Løsningen med de udkommenterede CDATA-escapings: //<![CDATA[ WRAPPER //]]>
- er i virkeligheden noget fordrukkent sludder. Det giver absolut ingen mening i forbindelse med XHTML og kan udelukkende bruges til at tilfredsstille en (i denne forbindelse tåbelig) markup-validator ... men det er jo ikke din skyld ;o)
Via en anden tråd er det gået op for mig, jeg er kommet til at lave en fejl i denne!
HTTP-header felter er case sensitive - og der skulle højere oppe have stået: oHttp.setRequestHeader("Content-Type", "text/xml");
'Content-Type' skal være med stort 'T'. Der sker mig bekendt ikke noget ved at skrive det med lille 't', men man kan ligeså godt gøre det korrekt. Sorry ;o)
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.