2010-11-19 6 views
0

Ich habe mit Getter und Setter gearbeitet, um die Aussicht zu vermeiden, globale Variablen zu verwenden. Ich bin jedoch auf ein Problem gestoßen. Der folgende Code, der für ganzzahlige Variablen geeignet ist, löst eine Ausnahme aus, wenn ich versuche, stattdessen einen AJAX-Aufruf auszuführen. Kann mir jemand erklären, warum das passiert?AJAX laden in Verbindung mit Getters und Setter


function Object_XML() { 
    me = this; 
    me.xml = null; 
} 

Object_XML.prototype = { 

    getXML: function() { 
     return me.xml 
    }, 

    setXML: function(data) { 
     me.xml = data; 
    }, 

    loadXML: function() { 
     $.ajax({ 
      type: "GET", 
      url: "questions.xml", 
      dataType: "xml", 
      success: function(xml) { 
       me.setXML(xml);   
      } //close success  
     });//close AJAX 
    }//close setXML 

}; 

$(document).ready(function() { 
    var data = new Object_XML(); 
    alert("This is an " + data.getXML()); 
    data.setXML(); 
    alert("This is an " + data.getXML()); 
}); 

Danke, Elliot Bonneville

+0

versuchen Sie es ohne das 'me', so' Erfolg: Funktion (xml) {setXML (xml); } ' – jcolebrand

Antwort

0

Sie negiert nur die Nutzung von privaten Variablen mit Getter und Setter von me = this; mit Sie me gerade gemacht eine globale Variable durch nicht var verwenden. (Jede Variable nicht mit var definiert wird, um den globalen Namensraum gebunden)

In Ihrem Fall, da Sie innerhalb des gleichen Objekts Umfang arbeiten Sie nur this verwenden können und vermeiden Sie die me wie persönlich, ich glaube, es ist verwirrend. Aber wenn Sie an diesem Paradigma festhalten möchten, verwenden Sie

Ihr Beispiel ist wirklich unklar, wo tritt der Fehler auf? Sie rufen data.setXml() ohne Parameter an, sodass me.xml auf undefined gesetzt wird. Das ist zu erwarten, wenn Sie nichts in die Methode eingeben.

Denken Sie auch daran, dass aufgrund der Asynchron Art des Anrufs, wenn Sie so wollen, etwas zu tun waren:

data.loadXml(); 
console.log("data.getXML();", data.getXML()); // would be undefined 

data.getXML() in diesem Moment noch nicht definiert werden würde, wie es wahrscheinlich, dass Ihr asynchron ist Der Aufruf wurde noch nicht zurückgegeben und setzt daher das XML-Attribut Ihres Objekts nicht.

Verwandte Themen