1

ここに私のJavaScriptコードがあります:

var Model =
{
    get: function(id)
    {
        return this.data[id];
    },

    data: {},

    init: function()
    {   
        var self = this;

        $.getJSON(urlToServer, function(data)
        {
            $.each(data, function(i, object)
            {
                self.data[object.id] = object;
                console.log(object.id); // output is: 1, then 2, then 3
            });
        });
    }
};

Model.init();
console.log(Model); // output is the initialized object with children objects 1, 2, 3
console.log(Model.get(1)); // output is undefined

コメントに入れたコンソール出力からわかるように、コードの最後の行まですべてが正常に機能します。モデルを定義し、サーバーによって提供されるいくつかの JSON オブジェクトでモデルを初期化します。しかし、突然、get() メソッドを使用して単一の子オブジェクトにアクセスしようとすると、モデルが未定義のように見えます。

私はそれを理解していません、私を助けてください。

ありがとう。

4

3 に答える 3

3

使用したサンプル コードを見ると、Model.get(1) は常に undefined を返します。

$.getJSON は、必ずしもすぐには戻らない (非同期として知られる) AJAX 呼び出しです。$.getJSON に指定したコールバックを使用して、Model.get(1) に依存するロジックを起動する必要があります。そうしないと、未定義のままになります。

于 2012-04-24T18:38:19.213 に答える
2

$.getJSON非同期リクエストなので、呼び出す前にレスポンスを待つ必要がありますModel.get()

于 2012-04-24T18:37:07.053 に答える
0

オブジェクトのフィールド「142」を取得しようとしています。jsonから「1」、「2」、「3」のIDのみを取得すると思いますか?私が正しければ、オブジェクト フィールド "142" が存在しないため、get 関数は正しい答えを返します。

于 2012-04-24T18:33:53.063 に答える