Hej NG.
Jeg har haft lidt bøvl med FF og XMLHttpRequest, og syntes lige jeg ville
dele lidt af hvad jeg har fundet frem til. Skal dog først lige sige, at det
er ikke lykkedes mig at finde noget dokumentation for afvigelsen - kan blot
konstatere at det virker efter hensigten her.
XMLHttpRequest anvendes til at hente data fra serveren asynkront - altså så
en sides indhold kan ændres efter siden er blevet hentet.
XMLHttpRequest anvendes sammen med (java)script, hvorfor teknikken ofte
betegnes AJAX - Asynkron Javascript And XML.
http://www.w3.org/TR/XMLHttpRequest/
Det kan så gøres på flere måder.
Man kan GET eller POST - altså overføre parametre fra clienten (hjemmesiden)
til serveren via "kommandolinen" (GET) eller i en separat forbindelse
(POST).
Og man kan vælge om kaldet skal være synkront eller asynkront. Dette
betegnes ellers ofte som blocking eller non-blocking. Vælger man asynkront,
vil det script der bruger kaldet fortsætte efter at have sat det i gang -
vælger man synkront, vil scriptet vente med at forsætte, til kaldet er
afsluttet.
Ved at kombinere GET/POST med asynkron/synkron er der altså 4 forskellige
måder at anvende XMLHttpRequest på.
Under udførelsen af sit kald, rapporterer XMLHttpRequest tilbage om sin
tilstand, ved at kalde en (java)script funktion som angives i parametren
onreadystatechange.
Og tingene fungerer, så vidt jeg har kunnet konstatere som de skal i IE6,
IE7, Opera og FF - med een eneste undtagelse...
Hvis man vælger at POSTe parametre, og anvende synkron (blocking)
overførsel, kan FF ikke finde ud af tingene. Kun hvis man har Firebug
installeret og aktiveret, er der "hul igennem", og man får de forventede
resultater.
Og så alligevel.
Med ovennævnte kombination, hedder onreadystatechange pludselig onload i
stedet for i FF.
Men kun i FF. De andre skal stadig have callback funktionen i
onreadystatechange.
Og værre endnu. Hvis FF har en værdi i onreadystatechange, virker en værdi i
onload heller ikke.
nav = window.navigator.appName;
if ( nav.indexOf( 'Netscape') > -1) {
req.onload = AjaxBack;
}
else {
req.onreadystatechange = AjaxBack;
}
Så virker
http://bbsorensen.dk også i FF og også uden Firebug.
Birger