Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

XmlHttpRequest.onreadystatechange <-> this-nøkkelordet

1 view
Skip to first unread message

ne...@arenybakk.com

unread,
Apr 1, 2008, 7:36:32 AM4/1/08
to
(også postet på comp.lang.javascript - poster evt oppklaring jeg får
der)

Hei, jeg har litt AJAX-relaterte problemer her. Håper noen kan gi litt
innsikt i hvor logikken feiler :)

Jeg ønsker å definere en funksjon for
XmlHttpRequest.onreadystatechange, men ikke in-line - og uten at denne
funksjonen må kjenne til requestobjektet. Såvidt jeg har forstått
legges en brukerdefinert funksjon inn som
XmlHttpRequest.onreadystatechange, slik at funksjonen da "tilhører"
XmlHttpRequest-objektet. Har jeg misforstått? Hvis jeg har rett,
hvorfor fungerer ikke da this-stikkordet inne i denne funksjonen (slik
det gjør ved definisjon av egne klasser)?

Jeg tenkte også at garbage-collection stakk kjepper i hjulene og
lagret request-objektet globalt (uten at onreadystatechange-funksjonen
benyttet denne), men resultatet ble det samme.

Har forsøkt å illustrere hva jeg ønsker å gjøre under.


function processResponse() {
if(this.readyState == 4) { //this.readyState er undefined!
//...
}

}

function getRequest() {
//...

}

function sendRequest(responseFunction, parameters) {
var request = getRequest();
request.onreadystatechange = responseFunction;
request.open("POST", "url", true);
request.setRequestHeader('Content-Type', 'application/x-www-form-
urlencoded');
request.send(parameters);

}

sendRequest(processResponse, "");

---

Ved definisjon av klasser, fungerer dette utmerket::

function MyClass() {
this.x = 5;
this.getX = myClassGetX;

}

function myClassGetX() {
return this.x;

}


--
Are Nybakk

ne...@arenybakk.com

unread,
Apr 6, 2008, 5:45:35 AM4/6/08
to

Jeg fikk noe klarhet i det til slutt. Problemet, som jeg har skjønt
det, er at this-nøkkelordet er avhengig av hvordan en metode kalles.
Det kan variere hvordan ajax-objektet gjør dette.

Løsningen er å gjøre som følger (takk til Tom Cole):

request.onreadystatechange = function() {
responseFunction(request);
}

Da benytter metoden referansen "request" framfor this-nøkkelordet.

0 new messages