27. marts 2007 - 21:48Der er
12 kommentarer og 1 løsning
this.xmlHttp has no properties
Hej eksperter
Nu er jeg igen stødt på et problem. Jeg er ved at lave mig et lille standard "bibliotek" som kan spare mig for en masse gentagen af kode. Men jeg får bare en irriterende meddelse i error consolen i Firefox, og gætter på fejlen er ens i Explorer... Nogen der kan forklare hvorfor?
Koden: function getXmlHttpObject() { this.xmlHttp = (window.ActiveXObject) ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest(); this.xmlHttp.onreadystatechange = this.readyStateChanged; this.output = ""; } getXmlHttpObject.prototype.sendRequest = function (reqMethod, page) { if (this.xmlHttp == null) { alert("You\'r browser doesn\'t support AJAX"); return false; } else if (reqMethod && page != "") { this.xmlHttp.open(reqMethod, page, true); this.xmlHttp.send(null); } return this.output; } getXmlHttpObject.prototype.readyStateChanged = function() { alert(this.xmlHttp.readyState); switch (this.readyState) { case 0: //strTime += "Readystate 0: " + time + "ms<br />" break case 1: //strTime += "Readystate 1: " + time + "ms<br />" break case 2: //strTime += "Readystate 2: " + time + "ms<br />" break case 3: //strTime += "Readystate 3: " + time + "ms<br />" break case 4: alert(this.xmlHttp.responseText); this.output = this.xmlHttp.responseText; break } } Error fejlen: Error: this.xmlHttp has no properties Line: 17
Jeg lagde også mærke til "<br />", hvilket indikerer at du vil kode op mod XHTML. De kloge siger, at XHTML ikke understøttes ordentligt, og det derfor frarådes.
I stedet før man bruger HTML 4.01.. evt i Strict mode, men helst almindelige Loose..
function getXmlHttpObject() { var me = this; this.xmlHttp = (window.ActiveXObject) ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest(); this.xmlHttp.onreadystatechange = function(){me.readyStateChanged()}; this.output = ""; }
Fordi, du befinder dig i to forskellige scopes. Du kan prøve at tjekke, hvilket objekt, du sigter på med keyword'et 'this', når du bruger: this.xmlHttp.onreadystatechange = this.readyStateChanged;
I din callBack-handler skriver du:
getXmlHttpObject.prototype.readyStateChanged = function() { var a = []; for (var x in this) a.push(x + " => " + this[x]); alert(a.join("\n")); return;
"Men ellers kan jeg godt se hvorfor det skal være me og ikke this, selvom me også burde være et andet scope?" >> 'this' er knyttet til det scope, hvori det bruges. Brugte jeg 'this' i stedet for 'me' i den anonyme funktion, ville jeg referere til det globale scope. På det tidspunkt, hvor den anonyme funktion afvikles, refererer 'this' ikke til objektet =)
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.