Avatar billede hsm Nybegynder
02. september 2009 - 12:14 Der er 3 kommentarer

Problem med Undefined i objekt

Hej

Jeg har et stykke Javascript der driller. Problemet er at "this.request" pludselig er "undefined" i min doCallBack() metode, selvom "this" stadig er ok.

Her er koden:

function doHttpRequest(formRef) {
    if(formRef.elements.length == this.refNames.length) {
        var url = "stat-search.php?";
        for(var i = 0; i < formRef.elements.length; i++) {
            url = url + refNames[i] + "=\"" + escape(formRef.elements[i].value) + "\";";
        }
        this.request.open("GET", url, true);
        this.request.onreadystatechange = this.callBack;
        this.request.send(null);
    } else {
        // throw exception
    }
}

function doCallBack() {
    if (this.request.readyState == 4) {
        if(this.request.status == 200) {
            document.getElementById("listView").innerHTML = this.request.responseText;
        }
    }
}

/*
        Constructor
*/

function ajax(listViewRef, refNames) {
    this.listView = listViewRef;
    this.refNames = refNames;
    this.request = null;
 
    try {
        this.request = new XMLHttpRequest();
    } catch (trymicrosoft) {
        try {
            this.request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (othermicrosoft) {
            try {
                this.request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (failed) {
                this.request = null;
            }
        }
    }
    if (this.request == null) {
        // throw exception
    }

    this.httpRequest = doHttpRequest;
    this.callBack = doCallBack;
}
Avatar billede olebole Juniormester
02. september 2009 - 13:55 #1
<ole>

Det kunne være, du skulle prøve med noget Ajax - for det kan man knap kalde den kode, du viser. Begynd med denne wrapper:
    http://dengodekode.dk/artikler/ajax/xmlhttprequest_wrapper.php

Derudover har escape været deprecated i en hel del år efterhånden. Du kan ikke bruge iso-8859-1 sammen med JavaScript.

Du skal nok kikke lidt mere på OOP i JS og brugen af this, samt hvor det peger hen  =)

/mvh
</bole>
Avatar billede hsm Nybegynder
02. september 2009 - 15:41 #2
Kære Ole

Ja, du har lavet en fin lille side. Jeg kunne selvfølgelig følge dit råd og kopiere din kode, men det var ikke lige det der var pointen.

"(..) - for det kan man knap kalde den kode, du viser" - det ved jeg ikke lige hvor du vil hen med, men det var da en underlig tone at anvende.

"Du skal nok kikke lidt mere på OOP i JS og brugen af this, samt hvor det peger hen  =)" - jeg har min OOP viden fra Java og ikke fra Javascript, men hvis du mener jeg gør noget forkert kunne du jo komme med noget konkret.
Avatar billede olebole Juniormester
02. september 2009 - 16:36 #3
Intet interesserer mig mindre end, hvor fin eller lille min side er. Jeg viser dig linket, fordi det i modsætning til din egen kode, er opdateret til brug i dette årtusinde. De objekter, du forsøger at instantiere med din kode, er forlængst deprecated. Hvis du nu havde taget dig tid til at tjekke koden, ville du også have forvisset dig om, at den er skrevet betydeligt mere i overensstemmelse med meningen bag OOP. Således spørger jeg kun én gang til, hvad browseren understøtter - og opretter så en klasse, indrettet efter dét. Din kode stiller derimod disse spørgsmål, hver gang et objekt instantieres.
Det undrer mig, at du mener den slags venlighed skal besvares med plumpe forsøg på patroniserende arrogance!

Koden, du viser består af oldgammel kode fra midten af 90'erne. Ajax fik sit navn i 2005. Så tror jeg, du ved lidt mere om, hvor jeg ville hen med det.

Derudover finder jeg det bekymrende, at du finder en ligefrem tone for underlig. Jeg har jo altid fundet det mystisk, når folk ikke siger sandheden om, hvad de mener - men pakker ord ind i ligegyldige blonder og guirlander, så meningen bliver totalt tåget. Smid svedsken på disken!  ;o)

Nej, at forklare OOP under JavaScript er alt for omfattende for en Eksperten tråd, så jeg må gentage min opfordring til at læse noget om emnet. Ikke mindst da Java og JavaScript er væsentligt forskellige, hvad OOP angår
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