Нагрузка AJAX в сочетании с геттерами и сеттерами - PullRequest
0 голосов
/ 19 ноября 2010

Я работал с геттерами и сеттерами, чтобы избежать перспективы использования глобальных переменных.Однако я столкнулся с проблемой.Приведенный ниже код, который отлично работает с целочисленными переменными, выдает исключение, когда я пытаюсь вместо этого запустить вызов AJAX.Может кто-нибудь объяснить мне, почему это происходит?


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

Спасибо, Эллиот Бонневиль

1 Ответ

0 голосов
/ 19 ноября 2010

Вы просто отказались от использования приватных переменных с геттерами и сеттерами, используя me = this; Вы только что сделали me глобальной переменной, не используя var.(любая переменная, не определенная с помощью var, присоединяется к глобальному пространству имен)

В вашем случае, поскольку вы работаете в одной и той же области объекта, вы можете просто использовать this и избегать me как личнодумаю, что это сбивает с толку.Но если вы хотите придерживаться этой парадигмы, используйте var me = this;

Ваш пример действительно неясен, где происходит ошибка?Вы звоните data.setXml() без параметров, поэтому me.xml сделает ставку на undefined.Этого следует ожидать, если вы ничего не передадите в метод.

Также имейте в виду, что из-за асинхронной природы вашего вызова вы должны сделать что-то вроде:

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

data.getXML () в тот момент все еще будет неопределенным, так как, вероятно, ваш асинхронный вызов еще не вернулся, поэтому не устанавливается атрибут xml вашего объекта.

...