在jquery中访问类变量

时间:2012-11-06 02:35:22

标签: javascript jquery ajax class

我在html中有一个select,并希望在页面加载时通过ajax添加选项。选项值在我的数据库中,我通过调用ajax获取它们。为此,我正在用javascript编写一个类,但我在运行时无法获取数据。请看一下:

--- Main.js ---

function MyLoader() {
    this._clients = null;
    this._code = null;
}

Loader.prototype = {

    var context = this;

    loadClients: function() {
        $.ajax({
            url: "my/php/",
            type: "POST",
            data: {...},
            success: function(response) {
                context._clients = response;
            }
        });
    },

    getCode: function() {...}
};

然后我有以下内容:

$(document).ready(function() {
    var loader = new Loader();
    loader.loadClients();
    alert(loader._clients);

    //Here I want to add my options to the select
});

我的提醒始终返回null,我不明白为什么。我需要在课堂上保存我的数据,以便随时访问它们。

你能指出我正确的方向让我的所有东西都有效吗?谢谢你的回答。

3 个答案:

答案 0 :(得分:1)

Loader.prototype = { //     v---callback parameter
    loadClients: function(callback) {
        $.ajax({
            url: "my/php/",
            context: this, // <---set success context
            type: "POST",
            data: {...},
            success: callback // <---pass callback
        });
    },

    getCode: function() {...}
};

$(document).ready(function() {
    var loader = new Loader();
                      //  v---pass callback
    loader.loadClients(function(response) {
        this._clients = response;
        alert(this._clients);
        //Here I want to add my options to the select
    });

});

答案 1 :(得分:0)

我相信您需要在“成功”回调中完成所有动态加载,因为它是异步加载的。

答案 2 :(得分:0)

你需要在成功回调中进行,因为它是异步的:

Loader.prototype = {

    var context = this;

    loadClients: function() {
        $.ajax({
            url: "my/php/",
            type: "POST",
            data: {...},
            success: function(response) {
                context._clients = response;
                alert(loader._clients);

               //Here I want to add my options to the select
            }
        });
    },

    getCode: function() {...}
};

$(document).ready(function() {
    var loader = new Loader();
    loader.loadClients();
});