AJAX charge conjointement avec accesseurs et de mutateurs
-
26-09-2019 - |
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
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.