11. juni 2008 - 16:26Der er
33 kommentarer og 1 løsning
ajax script opdateres ved ændring?
Hej,
jeg har brugt dette script til nogle forskellige elementer på et site så hele designet ikke skal opdateres hele tiden når man klikker lidt rundt... jeg tænker på om det evt kan udvides således at den chekker ex. hvert 5-10 sekund om noget i db'en er ændret, og hvis der er ændringer så opdateres den...?
nogle der kan udvide scriptet? :)
<script type="text/javascript">
function ajaxFunction(v){ //parameteren v bruges til at bestemme hvilket link, der er klikket på var xmlHttp; //Variabel oprettes try{ // Forsøg at xmlHttp=new XMLHttpRequest(); //oprette en XMLHttpRequest. Lykkedes hvis Firefox, Opera 8.0+, Safari } catch (e){ // Ved fejl forsøges: Internet Explorer. try{ // Gentagelse af ovenstående. Denne gange forsøges først IE 6.0+ xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); } catch (e){ try{ // Så forsøges Internet Explorer 5.5+ xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); } catch (e){ // Hvis vi har fået fejl gennem alle forsøgende gives fejlmeddelse alert("Your browser does not support AJAX!"); return false; } } }
xmlHttp.onreadystatechange=function(){ //funktion der tjekker om data er kommet og gemmer dem if(xmlHttp.readyState==4){ // når informationerne er hentet fra serveren og klar til brug document.getElementById("tekst").innerHTML=xmlHttp.responseText; //skiftes det eksisterende } //indhold i div-tagget ud med de hentede data.
}
if(v==1){ //her sættes en variabel der skifter indhold alt efter hvilket link brugeren har klikket var tekster = "nyheder1.php"; //her bestemmer du hvilke filer du skal hente. Mine hedder "nyheder1_2_3.php" } if(v==2){ var tekster = "nyheder2.php"; } if(v==3){ var tekster = "nyheder3.php"; }
xmlHttp.open("GET",tekster,true); //request sendes til serveren. variablen 'tekster' kan også skiftes ud med et filnavn. xmlHttp.send(null); }
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
Det skal du jo tjekke med PHP, dvs. på nyhederX.php-siderne. Så kan du f.eks. udskrive et nul (0). Så kan du i JavaScript teste, om der er udskrevet nul, for så skal siden jo ikke opdateres.
Jo, PHP kan jo netop læses med Ajax. :) Og Ajax er jo JavaScript. Men derudover kan JavaScript på ingen måde læse i din database, så derfor skal du - via Ajax - aflæse det med PHP, som jeg beskrev.
Så du kan bruge samme Ajax-kode som nu, kun med den ændring, at:
if(xmlHttp.readyState==4){ // når informationerne er hentet fra serveren og klar til brug document.getElementById("tekst").innerHTML=xmlHttp.responseText; //skiftes det eksisterende }
bliver til:
if(xmlHttp.readyState==4){ // når informationerne er hentet fra serveren og klar til brug if(xmlHttp.responseText!="0"){ document.getElementById("tekst").innerHTML=xmlHttp.responseText; //skiftes det eksisterende } }
men sådan som det her fungerer.. er det det vi kalder slamkode, eller er det sådan man bygger AJAX op? jeg har et shoutcast script, som egentlig fungerer lidt på samme måde som det jeg vil... jeg synes bare det er meget mere javakode, og ser noget mere avanceret ud?
function ajaxFunction(v){ //parameteren v bruges til at bestemme hvilket link, der er klikket på var xmlHttp=new XMLHttpRequest();
xmlHttp.onreadystatechange=function(){ //funktion der tjekker om data er kommet og gemmer dem if(xmlHttp.readyState==4){ // når informationerne er hentet fra serveren og klar til brug document.getElementById("tekst").innerHTML = xmlHttp.responseText; //skiftes det eksisterende } //indhold i div-tagget ud med de hentede data.
}
- og have en væsentig mere moderne kode ... vi er efterhånden oppe i MSXML2.XMLHTTP.6.0 ;o)
Derudover er det absolut 'slammet' at bruge innerHTML. Den har aldrig været valid og er et levn fra version 4 browserne, hvor der ikke var andre muligheder ... men det har der været de seneste 8 årstid! ;o)
I dag bør man afgjort bruge DOM til indsættelse af HTML. Serveren bør aldrig formatere data i HTML, men bør i stedet levere data i JSON eller XML. Du kan evt. se nogle eksempler på Ajax med PHP/JSON her: http://www.eksperten.dk/spm/817625
w13, jeg har kigget lidt videre på det du skrev.. jeg forstår dog ikke helt hvad det er du vil med det 0 ? hvis vi antager at den fil jeg henter ind hedder news.php... jeg kan så inde i news.php lave således at hvis der ikke er opdateret noget inden for ex. 5 sekunder, så laver den echo 0.. men det får jeg ikke noget ud af... jeg skal næsten bruge et eksempel for at komme videre... ?
if(xmlHttp.readyState==4){ // når informationerne er hentet fra serveren og klar til brug if(xmlHttp.responseText!="0){ document.getElementById("testdiv1").innerHTML=xmlHttp.responseText; //skiftes det eksisterende } } //indhold i div-tagget ud med de hentede data.
jeg ved ikke helt hvad der er lavet om, men nu virker det :)
men så er det sidste spørgsmål.... kan man ikke istedet på en måde chekke xmlHttp.responseText op med det der blev hentet sidste gang i stedet... fordi ellers skriver min fil jo bare 0 ud hver gang der ikke er sket noget.. og den skal jo stadig skrive det ud der står i filen.. den skal bare kun opdatere når der sker noget:)
det jeg mener er... hvis vi antager at scriptet er ex. til en tagwall, så når filen kaldes ind første gang for at se de indlæg der er, skal den jo udskrive filens indhold normalt... og først derefter, skal den begynde og chekke om der sker ændringer..
og til det du skriver med at gemme det sidste i en variabel, hvordan gør jeg lige det... vil den variabel ikke dø hver gang functionen er kørt?
jeg har lige opdaget at mit script ikke virker på nogen måder i internet explorer udover på den computer hvor man sidder og opdaterer.. den laver en fejl.:
linie 86 tegn 3 fejl: 'document.getElementById(...)' is null or not an object
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.