Avatar billede Slettet bruger
10. august 2007 - 09:05 Der er 7 kommentarer og
2 løsninger

AJAX onreadystatechange

Hej,

Jeg skal holde en timeoutkæde i gang, men vil gerne have denne til at vente mens AJAX henter en side. Kan jeg regne med, at scheduleUpdate ALTID vil blive kørt, selvom sidehentningsfejl opstår?

xmlHttp.onreadystatechange=function(){
    if(xmlHttp.readyState==4){
        scheduleUpdate(15000);
    }
}

/1
Avatar billede webcreator Nybegynder
10. august 2007 - 09:16 #1
For at vente med at afvikle noget kode til EFTER at AJAX er blevet færdig, benyttes blot et asynkront kald frem for et synkront.

Din scheduleUpdate vil mig bekendt blive kørt når HTTPRequest kaldet enten fejler eller bliver gennemført - men lav dog en simpel test, hvor du forsøger at hente noget fra en lokation der ikke eksisterer  :)
Avatar billede webcreator Nybegynder
10. august 2007 - 09:17 #2
Ok, du skal lige bytte rundt på Asynkront og Synkront i min tekst ovenfor :p
Asynkront = Sekventiel afvikling af din kode
Avatar billede Slettet bruger
10. august 2007 - 09:21 #3
Du mener vel at jeg skal køre det synkront i stedet for asynkront?
Men vil det ikke medføre at javascript hænger indtil siden er hentet? Altså står og venter på at siden henter, så javascript et sat ud af billedet i mellemtiden? (Det er hvad jeg går ud fra sker da javascript er enkelttrådet).

Problemet er ikke så meget fra en side, der ikke eksisterer - hvad hvis forbindelsen ryger under kaldet, requesten timer ud eller noget andet uhensigtsmæssigt sker.

/1
Avatar billede webcreator Nybegynder
10. august 2007 - 09:26 #4
Jo, JavaScriptet hænger imens.

Skal ikke kunne svare på hvad der sker hvis forbindelsen ryger. Prøv at hive netkablet ud ved dig selv ;)
Ellers kan en anden måske besvare spørgsmålet.
Avatar billede Slettet bruger
10. august 2007 - 09:45 #5
Jamen tak for dit forsøg ;)

Jeg søger et klart ja/nej svar om jeg kan regne med altid at læse readyState=4 ved en onreadystatechange event.
Avatar billede webcreator Nybegynder
10. august 2007 - 15:14 #6
Jeg vil mene at det bør du kunne regne med. Ellers kan jeg ikke se formålet med status-attributten på dit httpRequest objekt. Prøv at se nedenstående eksempel (taget fra Mozilla Developer Network: http://developer.mozilla.org/en/docs/AJAX:Getting_Started). Det er i hvertfald det tætteste jeg kommer på et dokumenteret svar :)

function alertContents(httpRequest) {
    if (httpRequest.readyState == 4) {
        if (httpRequest.status == 200) {
            alert(httpRequest.responseText);
        } else {
            alert('There was a problem with the request.');
        }
    }
}
Avatar billede webcreator Nybegynder
10. august 2007 - 15:15 #7
.. og her kan du se alle de forskellige status-koder for httpRequest objektet:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
Avatar billede Slettet bruger
11. august 2007 - 15:41 #8
Det lyder egentlig rimelig logisk - tak for din hjælp.
Avatar billede webcreator Nybegynder
12. august 2007 - 18:56 #9
Selv tak :)
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