0

我的 html 中有一个选择,并希望在页面加载时通过 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,我不明白为什么。我需要将我的数据保存在课堂上,以便在需要时随时访问它们。

你能给我指出正确的方向,让我所有的东西都能正常工作吗?谢谢您的回答。

4

3 回答 3

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

});
于 2012-11-06T02:40:30.033 回答
0

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

于 2012-11-06T02:39:33.853 回答
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();
});
于 2012-11-06T02:40:31.050 回答