Avatar billede searchjob Nybegynder
17. marts 2007 - 18:26 Der er 23 kommentarer

array og timers driller.!

hej jeg sidder med et irriterende problem.
jeg er begyndt på ajax og den gør sådan at den henter data via en php side som udskriver fx "U,EXP,0,0,0,0,0" osv..

så når den henter dataen, så tjekker den om der findes en div allerede med et id som kaldes "AVATAR-EXP". hvis den allerede findes skal den opdaterer dens top, left og z-index position...!

hvis den IKKE findes skal den opretter den div.

men hvordan kan det være den "sletter" dens div med mine timers? kan ikke se hvad fejlen skulle være.. prøv kig her, det forklare måske problemet...!?

var users = new Array();

....

når en bruger IKKE findes så opretter den dens div osv.. også sætter jeg dette først:
clearInterval(users[_name+'-reset']);
clearTimeout(users[_name+'-reset']);

users[_name+'-reset'] = setTimeout("deletediv('"+_name+"')",6500);


og når brugeren allerede findes, så opdaterer den også hele tiden, så den ikke går ned på 0 i timeout!..

clearInterval(users[_name+'-reset']);
clearTimeout(users[_name+'-reset']);

users[_name+'-reset'] = setTimeout("deletediv('"+_name+"')",6500);


men alligevel så fjerner den diven, men hvorfor??? jeg holder da hele tiden settimeout i live??
Avatar billede searchjob Nybegynder
17. marts 2007 - 18:28 #1
function deletediv( id )
{
  if ( document.getElementById(id + "-avatar") )
  {
      var o = document.getElementById(id + "-avatar");
      o.style.display = "none";
  } else {
      return false;
  }
}
Avatar billede roenving Novice
17. marts 2007 - 19:36 #2
Måske skal du lave et minimalt eksempel ?-)
Avatar billede searchjob Nybegynder
17. marts 2007 - 19:46 #3
hvad mener du med et minimalt eksempel? er jeg svær at forstå? det må i undskylde så.. det er lidt svært at forklare mit problem
Avatar billede roenving Novice
17. marts 2007 - 20:04 #4
Jeg kan bare ikke gennemskue, hvor i dit problem, der er et problem, så jeg håber på, at du kan forklare det med en udgave, som kun viser det mest nødvendige !-)
Avatar billede searchjob Nybegynder
17. marts 2007 - 20:54 #5
hmm prøver lige igen.
jeg henter data til ajax som er fra en php side.
dette indhold ajax får ind er fx "U,roenving,0,0,0,0"

så når dataen skal håndteres gør jeg sådan:
creatediv(roenving,0,0,0,0); som er en funktion

og i din funktion som kaldes creatdiv gør jeg sådan her
function creatediv(bruger,z,x,c,v,q)
{
  if ( document.getElementById(bruger+'-avatar))
  {
    /** DIVEN ER ALLEREDE OPRETTET.. NU SKAL DEN HOLDE SETTIMEOUT I LIVE **/
    clearInterval(users[bruger+'-reset']);
    clearTimeout(users[bruger+'-reset']);

    users[bruger+'-reset'] = setTimeout("deletediv('"+bruger"')",6500);
  } else {
    /** DIVEN FINDES IKKE.. NU SKAL DEN INDSÆTTE SÅDAN DEN OGSÅ FÅR TIMEOUT **/
    clearInterval(users[bruger+'-reset']);
    clearTimeout(users[bruger+'-reset']);

    users[bruger+'-reset'] = setTimeout("deletediv('"+bruger"')",6500);
  }
}

det skal siges den hele tiden tjekker om den findes.. altså den opdaterer og tjekekr hvert sekundt om diven findes.. så kan ikke rigtigt se hvorfor den alligevel fjerner diven?? er det til at forstå
Avatar billede searchjob Nybegynder
17. marts 2007 - 20:54 #6
og users[...] er et array..

var users = new Array();
Avatar billede roenving Novice
17. marts 2007 - 21:30 #7
Hvor findes funktionen til at oprette diven ?-)
Avatar billede searchjob Nybegynder
17. marts 2007 - 21:49 #8
det jo ligemeget, det er ikke der fejlen er jo.. det er "timers" der er galt med .. ikke det andet.. det virker jo fint nok..

fejlen er at den timeout går kold efter 6,5 sekunder og kalder funktionen som sletter diven.. det skal den jo ikke
Avatar billede searchjob Nybegynder
17. marts 2007 - 21:50 #9
gider ikke poste hele koden.. der er mange linjer og det vil alligevel være rodet for dig.. og jeg ved godt at så ville du opgive at hjæklpe mig.. og når fejlen alligevel ikke er der, så ser jeg ingen grund til at skulle skrive det hele ned..

fejlen ligger i users[...] = ... og ikke det andet
Avatar billede roenving Novice
17. marts 2007 - 22:00 #10
Du forudsætter godt nok, at det kan være svært at gennemskue dine scripts, det bliver ikke nemmere af, at de er hemmelige ...

-- men f.eks.

    users[bruger+'-reset'] = function(){setTimeout("deletediv('"+bruger"')",6500)};
Avatar billede searchjob Nybegynder
17. marts 2007 - 22:09 #11
vil den holde den i live hele tiden? og fjerner den så når den ikke opdaterer mere efter 6,5 sek?
Avatar billede roenving Novice
17. marts 2007 - 22:18 #12
Det aner jeg jo netop ikke ...
Avatar billede searchjob Nybegynder
17. marts 2007 - 22:49 #13
okay.. det virker ikke.. her kan du se min kode..
http://pastebin.parentnode.org/5520 .. jeg sagde jo den var rodet
Avatar billede searchjob Nybegynder
17. marts 2007 - 23:38 #14
som jeg sagde..."gider ikke poste hele koden.. der er mange linjer og det vil alligevel være rodet for dig.. og jeg ved godt at så ville du opgive at hjæklpe mig.."
Avatar billede jhe-ting Nybegynder
18. marts 2007 - 15:10 #15
Prøv at rette linjerne 18 og 25 fra:

  users[_name+'-reset'] = function(){setTimeout("deletebutton('"+_name+"')",6500)};

til:

  users[_name+'-reset'] = setTimeout("deletebutton('"+_name+"')",6500);


idet: clearTimeout og clearInterval skal have returværdien fra den tilsvarende setTimeout/setInterval for at standse.
Avatar billede jhe-ting Nybegynder
18. marts 2007 - 15:13 #16
PS: Der er en del forskel på koden på 'pastebin' og eksemplet fra 17/03-2007 20:54:15 hvor der faktisk står det der 'skal'.
Avatar billede searchjob Nybegynder
18. marts 2007 - 20:43 #17
clearTimeout(users[_name+'-reset']);

den har da også en værdi??
Avatar billede jhe-ting Nybegynder
19. marts 2007 - 10:29 #18
NEJ! clearTimeout returnerer ingen værdi.
    http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/cleartimeout.asp

Det gør setTimeout derimod.

    http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/setTimeout.asp

Den enkeltstående funktion du viser i pastebin afhænger af andre 'ting' der ikke vises.

Da alting afhænger af alle andre ting, og hver detalje kan være vigtig, er det usikkert at prøve at løse et "isoleret" problem når man kun ser brudstykker af koden.

Prøv at laver et lille kort enkeltstående eksempel der på simpleste måde demonstrerer problemet.
Avatar billede jhe-ting Nybegynder
19. marts 2007 - 10:36 #19
PS: Computerprogrammering er det mest 'per-nitten-gryn'' man kan foretage sig i denne verden. Syntaksen i programmeringssprog kræver fuld opmærksomhed på detailjer og hver et komma tæller.

PPS: Hvis din kode er rodet, kan det være en del af problemet. Måske finder du selv løsningen hvis du prøver at reproducere fejlen i et enkelt eksempel. ;}
Avatar billede searchjob Nybegynder
19. marts 2007 - 14:58 #20
passer vidst ikke helt hvad du siger..
var lol = setTimeout("alert('a')",1000);
clearTimeout(lol);
alert(lol);

vil virke fint, så jo den fjerner settimeout igen
Avatar billede jhe-ting Nybegynder
19. april 2007 - 13:46 #21
Har du fået 'styr' på det?
Avatar billede olebole Juniormester
19. april 2007 - 14:07 #22
<ole>

searchjob >> udfra din kommentar (19/03-2007 14:58:14) tyder det på, du ikke har forstået, hvad jhe-ting skriver. Dette fungerer:
    var nTimer = setTimeout("alert('HiHo')", 6500);
    clearTimeout(nTimer);

- men det gør dette ikke:
    var nTimer = function(){setTimeout("alert('HiHo')", 6500)};
    clearTimeout(nTimer);

Det skyldes, at der ikke lægges en reference til timeout'en i nTimer i andet eksempel. Måske dette kan tydeliggøre problemet:
    var nTimer = setTimeout("alert('HiHo')", 6500);
    alert("Her returneres et tal, som er referencen til timeout'en: " + nTimer);

    var nTimer = function(){setTimeout("alert('HiHo')", 6500)};
    alert("Her returneres ikke en reference til timeout'en, da denne ligger indlejret i en anonym funktion: " + nTimer);

/mvh
</bole>
Avatar billede olebole Juniormester
19. april 2007 - 14:20 #23
Til gengæld har din kode ikke meget med AJAX at gøre. Der hersker ret stor forvirring om, hvad AJAX er - hvilket formodentligt skylde bunker af tutorials, skrevet af folk, der ikke selv har forstået AJAX (og meget andet vedrørende webkodning). Ikke mindst er w3schools.com skyldig i en stor del af denne forvirring. Hans eksempler er (som resten af hans site) proppet med fejl, mangler og udeladelser.

Når man bruger AJAX, udveksler man 'uformaterede, rå' data mellem server og klient ... aldrig HTML-formaterede data. Property'en innerHTML har aldrig været valid i nogen somhelst standard - og i forbindelse med XHTML er den totalt uden mening. Hvis browserne faktisk understøttede XHTML korrekt (hvad ingen browsere gør i øjeblikket), ville browseren dø med et XML-fejl-suk, så snart du forsøger at fyre op under innerHTML.

Når du returnerer data til klienten, bør du formatere data i XML eller JSON - og oprette HTML-elementer med DOM ... fylde data i disse - og indsætte dem i dokumentet med DOM  ;o)
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