"Rune Jensen" <runeofdenmark@gmail.com> skrev i en meddelelse
news:73fce426-d22d-4050-acb2-55b0af44078d@e10g2000prf.googlegroups.com...
8X
Min OE er ikke i humør til at markere oprindelig meddelelse - håber det
bliver forståeligt...
function HentFil(url) {
makeReqObj();
if ( req != null) {
req.open( 'get', url, true);
req.setRequestHeader( 'Content-Type', 'application/x-www-form-
urlencoded');
req.setRequestHeader( 'Accept-Charset', 'iso-8859-1, utf-8');
req.setRequestHeader( 'Accept-Language', 'da');
nav = window.navigator.appName;
if ( nav.indexOf( 'Netscape') > -1) {
req.onload = AJAXDone;
}
else {
req.onreadystatechange = AJAXDone;
}
req.send(null);
}
}
Et kort svar på dit spørgsmål, er at den initialiserer et XMLHTTPRequest
object, og sender en request.
XMLHTTPReq er et object.
makeReqObj instantierer et sådan object, hvis muligt.
Hvis der er succes med instantiering (oprettelse af object), er der en række
egenskaber i objectet, man kan/skal sætte, så det opfører sig som man
forventer, og får de resultater man ønsker sig.
Først er der req.open(), der er en slags initialisering af objectet. Det
sætter get/post, hvilken url man ønsker at hente data fra, og hvordan man
ønsker sig kommunikationen (true for asynkron false for synkron).
Derefter sættes en række af data for headeren, som bestemmer en del om
hvordan kommunikationen foretages. Der er mange muligheder for at sætte
headere.
Ideen med "AJAX" er at man kalder et script på serveren, som returnerer
nogle data. Når kommunikationen er færdig, kalder objectet en funktion, hvor
man så kan anvende de data der returneres.
Det er denne funktion der sættes i onreadystatechange / onload.
Som Johan har forklaret, kaldes denne funktion faktisk flere gange i
forløbet af kommunikationen mellem browser og server, men normalt er man kun
interesseret i at vide når den er færdig.
onload anvendes / kendes svjv. kun af FF - derfor også detekteringen af FF.
onreadystatechange er navnet i øvrige tilfælde. FF kender godt
onreadystatechange - undtagen hvis man anvender post og synkron
kommunikation sammen, da anvendes kun onload i FF. (Hvilket er i
overensstemmelse med udkast til standarden). Imidlertid opfører de andre
(M$) sig ikke efter standarden. Jeg har valgt at lade FF altid bruge onload,
efter Mozilla dokumentation. At FF kender eller accepterer
onreadystatechange, er ikke i Mozillas dokumentation - men det gør den i
praksis. Men der er ikke er nogen der siger at den bliver ved med det.
Endelig kaldes req.send(), som starter kommunikationen med serveren -
aktiverer objektet kan man sige.
Har set Johans forklaring. Der er lidt der måske kan misforstås om hvornår
hvad sker - der sker ingenting, før send() kaldes.
function AJAXDone() {
if ( req.readyState == 4) {
if ( req.status != 200) {
alert( 'Fejl ved AJAX request : Status '+req.status+'
returneret.');
}
else {
document.getElementById('asp').innerHTML = req.responseText;
}
}
}
På menneskesprog, behandler den de data der blev returneret som resultat af
requesten.
readyState er den tilstand, objectet befinder sig i. Vi er kun interesseret
i at undersøge resultatet, når kommunikationen er overstået. (Se Johans
forklaring)
Hvis den er det, er readyState == 4. Men fordi kommunikationen er slut, er
det ikke givet, at alt gik som det skulle.
Det står i objectets status, som indeholder resultatet af selve
kommunikationen. Kun hvis status er 200, forgik kommunikationen som
forventet/håbet ;>)
"...spørgsmål: Hvad vil man kalde onload og onreadystatechange (så det
er til at forstå)? Altså hvad er præcist deres funktion? Der er også
en req.status, og hvad vil man så kalde den? Hvad er forskellen på
readystatechange og status? De er vel begge status for req-objectet?"
onload/onreadystatechange er en callback funktion.
Det er den samme, men den kaldes forskelligt i FF og de øvrige - og også i
standarden.
Det er en funktion der kaldes, hver gang readyState ændres i objektet -
altså hver gang der sker ændringer i objectets (browserens) kommunikation
med serveren.
XMLHTTPRequest objectet har en readyState variabel der holder styr på hvor
langt i kommunikationen det er nået. Se Johans forklaring.
status er også en variabel i samme object. Men den eksisterer kun når
readyState er 4 - altså kommunikationen er afsluttet - og status fortæller
hvordan kommunikationen er forløbet - 200 for OK, 404 hvis den angivne url
ikke findes, osv.
Håber det giver mening. Ellers prøv igen ;>)
Birger
-----
http://bbsorensen.dk
http://varmeretter.dk - hverdagsmad. Sundt, nemt, hurtigt og billigt. Daglig
opdatering.