Avatar billede hagger Nybegynder
06. april 2010 - 20:02 Der er 16 kommentarer og
1 løsning

Ajax bliver ikke ved med at opdatere

Hejsa. Jeg er igang med en tagwall, som gerne skulle opdatere nye beskeder. Den skal tjekke om der er kommet nye beskeder hvert 10'ende sekund, og hvis der er det skal den opdatere tagwallen med dem. Og indtil videre er jeg kommet frem til denne kode:


var getid = getXmlHttpRequestObject();
var gettags = getXmlHttpRequestObject();
var id = "";
function getXmlHttpRequestObject() {
if (window.XMLHttpRequest) {
return new XMLHttpRequest();
} else if(window.ActiveXObject) {
return new ActiveXObject("Microsoft.XMLHTTP");
}
}
function update(){ 
getid.onreadystatechange=lastid;
getid.open("GET","tagwalllastid.php",true);
getid.send(null);
setTimeout("update()", 10000);
}
function lastid(){
if (getid.readyState==4)
{
if(id!=getid.responseText){
gettags.onreadystatechange=tags;
gettags.open("GET","tagwallServer.php",true);
gettags.send(null);
}
id = getid.responseText;
}
}
function tags(){
if (gettags.readyState==4){
document.getElementById("screen").innerHTML = gettags.responseText;
}
}
update();


Og lige for at fortælle lidt om den, så inde på tagwalllastid.php, der er det eneste der står ID'et på den sidste tagwall-besked der er skrevet.

Og i tagwallServer.php er alt de tags jeg vil vise i tagwallen.

Lige pt opdaterer den ikke når der kommer nye beskeder.. Kan i se hvad der er galt?
Avatar billede Slettet bruger
07. april 2010 - 00:02 #1
Det er lidt.. convoluted - men ser ud til at hænge sammen...
- bliver lastid() hhv. tags() nogensinde kaldt ?
Avatar billede hagger Nybegynder
07. april 2010 - 08:46 #2
Ja, det klarer disse to sætninger:

getid.onreadystatechange=lastid;

gettags.onreadystatechange=tags;
Avatar billede olebole Juniormester
07. april 2010 - 09:58 #3
<ole>

Mon ikke der opdateres? Browseren cacher sikkert bare resultatet. Prøv dette i stedet:

function update(){ 
    getid.onreadystatechange=lastid;
    getid.open("GET","tagwalllastid.php?u="+new Date().getTime(),true);
    getid.send(null);
    setTimeout("update()", 10000);
}


/mvh
</bole>
Avatar billede olebole Juniormester
07. april 2010 - 10:01 #4
- og hvorfor ikke bruge post (så caches resultatet ikke):

function update(){ 
    getid.onreadystatechange=lastid;
    getid.open("post","tagwalllastid.php",true);
    getid.send(null);
    setTimeout("update()", 10000);
}
Avatar billede hagger Nybegynder
07. april 2010 - 14:48 #5
Der bliver ikke opdateret.. Når jeg ved der er kommet nye beskeder dukker de i hvertfald ikke op på siden, så der må jo være fejl i koden. olebole, jeg har prøvet det du har sagt, men det virkede ikke. Måske kan det være noget med getid.responseText og gettags.responseText der ikke kan ændres? Eller måske noget med denne funktion:

function tags(){
if (gettags.readyState==4){
document.getElementById("screen").innerHTML = gettags.responseText;
}
}

Det kunne også være noget andet... Håber I vil hjælpe :)
Avatar billede olebole Juniormester
07. april 2010 - 15:04 #6
Prøv at lægge et link til et live eksempel. Så vidt jeg kan se, er det ikke i koden, du viser her, du laver fejl - omend det er lidt bøvlet at se udfra din kodesovs (du børe lære at indrykke, mens du skriver din kode. Ellers lærer du aldrig at kode).
Avatar billede olebole Juniormester
07. april 2010 - 15:07 #7
Fuck, hvor er jeg dog træt af Ekspertens elendige session-håndtering - eller hvad det nu er, der gør, at så mange klager over, at det ene efter det andet indlæg forsvinder, når der trykkes 'Opret' ...!!!

Anyway ... læg et link til et live eksempel. Det er øjensynligt ikke i koden, du viser her, du laver fejl
Avatar billede olebole Juniormester
07. april 2010 - 15:09 #8
*LoL* dér var det zq så alligevel!  :D

Hvis jeg kunne kode, som Ekspertens kodere, ville jeg aldrig spilde tid på se Klovn!  :o|
Avatar billede hagger Nybegynder
07. april 2010 - 15:14 #9
Hehe, da jeg ville se et prewiew af en besked før, forsvandt den også...

Men jo, http://www.nsavisen.ooz.dk/test/tagwalltest.php :)
Avatar billede hagger Nybegynder
07. april 2010 - 22:55 #10
Og ja, jeg må se at gøre det til en vane at indrykke.. :)

Har du kigget på det? :)
Avatar billede hagger Nybegynder
07. april 2010 - 22:55 #11
Det blev åbenbart til et svar -.-
Avatar billede hagger Nybegynder
08. april 2010 - 20:11 #12
Kigger du på det olebole? Og andre er også meget velkomne til at byde ind med rettelser af koden eller lign. :)
Avatar billede hagger Nybegynder
09. april 2010 - 14:31 #13
Olebole, du kunne da lige skrive at du ikke ved hvad fejlen er så, i stedet for slet ikke at svare? Jeg går og venter på svar, og kan jo ellers ikke vide om du ikke kigger på det mere.. Men jeg har set du har svaret mange andre i de sidste par dage så regner med du ikke kan finde løsningen...
Avatar billede sluppermanden Nybegynder
14. april 2010 - 10:08 #14
@hagger
Jeg ville normalt også pege på cache som olebole.
Har lavet en lille test og det virker da også fint hos mig.

Jeg tænke at det måske er noget i din logik der fejler.
e.g if(id!=getid.responseText)

Det er lidt svært at fejlfinde når der ikke kommer nogen opdateringer på din side. For så skal den jo ikke reloade.
Avatar billede hagger Nybegynder
14. april 2010 - 21:45 #15
Virker denne kode for dig i Internet Explorer da? og nej, men for at tjekke det kan du oprette en bruger på nsavisen.ooz.dk og så skrive i tagwallen. så skulle den gerne opdatere, men det gør den ikke i Internet Explorer.
Avatar billede hagger Nybegynder
14. april 2010 - 21:47 #16
Altså den tagwall der er inde på nsavisen.ooz.dk nu virker fint i begge browsere, men det er den på http://www.nsavisen.ooz.dk/test/tagwalltest.php du så skal se om den opdaterer på..
Avatar billede sluppermanden Nybegynder
14. april 2010 - 22:41 #17
Ok, du kunne jo bare have skrevet at problemet var i IE, så havde vi sparet lidt tid.

Anyways, tror ikke fejlen ligger i din ajax men på din new side 8)

Din side bliver cached af IE.
Dette kan undgås ved at tilføje et par headers.

Prøv at starte din new.php med

header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
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