0

HTMLにselectがあり、ページが読み込まれたときにajaxを介してオプションを追加したいと思います。オプションの値は私のDBにあり、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

非同期で読み込まれるため、「success」コールバック内ですべての動的読み込みを行う必要があると思います。

于 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 に答える