Question

Je travaille avec des accesseurs pour éviter la perspective d'utiliser des variables globales. Cependant, j'ai rencontré un problème. Le dessous de code, qui fonctionne très bien avec des variables entières, lance une exception lorsque je tente de lancer un appel AJAX à la place. Quelqu'un peut-il me expliquer pourquoi cela se passe?


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());
});

Merci, Elliot Bonneville

Était-ce utile?

La solution

Vous venez ANNULEES votre utilisation de variables privées avec des accesseurs en utilisant me = this; Vous venez de faire me une variable globale en n'utilisant var. (Toute variable non définie à l'aide var se joint à l'espace de noms global)

Dans votre cas, puisque vous travaillez dans le même champ d'objet que vous pouvez simplement utiliser this et éviter les me que personnellement, je pense qu'il est source de confusion. Mais si vous voulez en tenir à ce paradigme, l'utilisation var me = this;

Votre exemple est vraiment pas clair, d'où vient l'erreur se produit? Vous appelez data.setXml() sans paramètres, donc me.xml pariera ensemble à undefined. C'est à prévoir si vous passez rien dans la méthode.

Gardez également à l'esprit que, en raison de la nature async de votre appel, si vous deviez faire quelque chose comme:

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

data.getXML () à ce moment serait encore indéfini car il est probable que votre appel asynchrone n'a pas encore de retour, donc pas définir l'attribut xml de votre objet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top