2012-04-24 8 views
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()メソッドで単一の子オブジェクトにアクセスしようとすると、モデルは未定義のように見えます。

私はちょうどそれを得ることはありません、私を助けてください。

ありがとうございました。

+0

ハッキングされた例がここにあります:http://jsfiddle.net/jtbowden/dxFmP/1/ –

答えて

3

を呼び出す前に、あなたはModel.getは、(1)常に未定義を返し、応答を待つ必要があります。

$ .getJSONは必ずしも即座に返されるわけではありません(非同期と呼ばれる)AJAX呼び出しです。 $ .getJSONに与えたコールバックを使用して、Model.get(1)に応じてロジックを起動する必要があります。それ以外の場合は、未定義のままです。

0

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

+0

これはタイプミスです。それはModel.get(1)と言うべきです。私はそれを編集していたと思った... thx – xon1c

2

$.getJSONが非同期要求であるあなたが使用するサンプルコードを見てみるとModel.get()

関連する問題