carico AJAX in congiunzione con Getter e Setter
-
26-09-2019 - |
Domanda
Ho lavorato con getter e setter per evitare la prospettiva di utilizzare variabili globali. Tuttavia, ho incontrato un problema. Il codice qui sotto, che funziona bene con variabili intere, genera un'eccezione quando si tenta di eseguire una chiamata AJAX invece. Qualcuno può spiegare a me perché questo sta accadendo?
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());
});
Grazie, Elliot Bonneville
Soluzione
Hai appena negato l'utilizzo di variabili private con getter e setter utilizzando me = this;
Hai appena fatto me
una variabile globale non usando var
. (Qualsiasi variabile non definita utilizzando var si attacca al namespace globale)
Nel vostro caso, poiché si sta lavorando all'interno della stessa portata oggetto che si può semplicemente utilizzare this
ed evitare il me
come personalmente, penso che sia confuso. Ma se si vuole attenersi a tale paradigma, l'uso var me = this;
Il vostro esempio è davvero poco chiara, in cui accade l'errore? Si sta chiamando data.setXml()
senza parametri, in modo da me.xml
punterà insieme a undefined
. Questo è da aspettarsi se si passa nulla nel metodo.
Anche tenere a mente che a causa della natura asincrona della tua chiamata, se si dovesse fare qualcosa di simile:
data.loadXml();
console.log("data.getXML();", data.getXML()); // would be undefined
data.getXML () in quel momento sarebbe ancora indefinito in quanto è probabile che la chiamata asincrona non è ancora tornato, quindi non impostare l'attributo XML del vostro oggetto.