Leif Neland tastede følgende:
> Jeg har noget ajax-halløj, der giver fejl for visse brugere.
>
> Her er starten af funktionen, indtil den fejlgivende linie.
>
>
> function sendRequest(action, ID, Opp)
> {
> var ready_state;
> var req = window.XMLHttpRequest ? new XMLHttpRequest()
> : new ActiveXObject("Microsoft.XMLHTTP");
> req.onreadystatechange = function()
> {
> ready_state=req.readyState; <- Her kommer fejlen:
> "Null" er null eller ikke et object
>
> Er der andre metoder end
> new XMLHttpRequest()
> og new ActiveXObject("Microsoft.XMLHTTP")
>
> der kan prøves?
>
Du kan teste ved at skrive din asignement i en if.
Eller opret objectet i en funktion for sig - der er mange muligheder -
se også Lasses svar.
Jeg bruger denne - og har ikke hørt om nogen hos hvem det ikke
virker...
(
http://bbsorensen.dk?men=Software/AJAX/Teknik)
function MakeAjaxObj() {
try { oReq = new XMLHttpRequest(); }// Mozilla, Safari, IE7...
catch(e) {
try { oReq = new ActiveXObject("MSXML2.XMLHTTP.3.0"); }// ældre
IE
catch(e) {
try { oReq = new ActiveXObject("Microsoft.XMLHTTP"); } //
Andre
catch(e) { oReq = null; }
}
}
if ( oReq == null) { alert( 'Din browser kan ikke AJAXe'); }
return oReq;
}
Du kan så teste sådan :
function sendRequest(action, ID, Opp) {
var ready_state;
if ( req = MakeAjaxObj()) {
req.onreadystatechange = function() {
ready_state=req.readyState;
...
}
}
}
> Men burde man overhovedet kunne nå linien med req.readyState, hvis
> var req = ... ikke giver et brugbart objekt?
Jo da. En variabel kan godt være null - fejlen er at du forsøger at
læse nogen egenskaber null ikke har...
>
> Jeg skal nok lægge en linie ind med
> if (req==null) {skriv("din browser er dum");exit;}
Vil formentlig give en fejl : ukendt funktion "skriv()"... ;>)
Men noget i den retning, med en alert, kunne også bruges...
Er nu ikke sikker på at browseren er dum, fordi den ikke kan AJAXe.
Brugeren kan jo have slået brugen af ActiveX fra.
I øvrigt mener jeg at huske, at open() skal kaldes først - det er en
initialisering af objectet. Den funktion du tildeler onreadystatechange
vil blive resat/fjernet, når du senere kalder open(). Dette også
reflekteret af mulige værdier for readyState.
Birger
--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk