2010-11-19 26 views
0

J'ai travaillé avec des getters et setters pour éviter la perspective d'utiliser des variables globales. Cependant, j'ai rencontré un problème. Le code ci-dessous, qui fonctionne correctement avec les variables entières, déclenche une exception lorsque j'essaie d'exécuter un appel AJAX à la place. Quelqu'un peut-il m'expliquer pourquoi cela se passe?AJAX load en conjonction avec Getters et Setters


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

+0

Essayez-le sans le 'me', donc' succès: function (xml) {setXML (xml); } ' – jcolebrand

Répondre

0

Vous venez niés 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. (Dans le cas où vous travaillez dans la même portée d'objet, vous pouvez simplement utiliser this et éviter le personnellement, je pense que c'est déroutant. Mais si vous voulez coller à ce paradigme, utilisez var me = this;

Votre exemple est vraiment peu clair, où l'erreur se produit-elle? Vous appelez data.setXml() sans paramètre, alors me.xml sera misé sur undefined. C'est à prévoir si vous ne passez rien dans la méthode.

Gardez à 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 non défini comme il est probable que votre asynchrone L'appel n'est pas encore retourné, ce qui ne définit pas l'attribut xml de votre objet.