2010-11-19 9 views
0

私はゲッターとセッターを使って、グローバル変数の使用を避けています。しかし、私は問題に遭遇しました。整数変数で正常に動作する以下のコードは、AJAX呼び出しを実行しようとすると例外をスローします。誰かが私になぜこれが起こっているのか説明することができますか?ゲッターとセッターと一緒にAJAXをロード


function Object_XML() { 
    me = this; 
    me.xml = null; 
} 

Object_XML.prototype = { 

    getXML: function() { 
     return me.xml 
    }, 

    setXML: function(data) { 
     me.xml = data; 
    }, 

    loadXML: function() { 
     $.ajax({ 
      type: "GET", 
      url: "questions.xml", 
      dataType: "xml", 
      success: function(xml) { 
       me.setXML(xml);   
      } //close success  
     });//close AJAX 
    }//close setXML 

}; 

$(document).ready(function() { 
    var data = new Object_XML(); 
    alert("This is an " + data.getXML()); 
    data.setXML(); 
    alert("This is an " + data.getXML()); 
}); 

あなただけのあなただけのvarを使用しないことにより、meグローバル変数を作っme = this;を使用することによりゲッターとセッターとのプライベート変数の使用を否定おかげで、エリオット・ボンネビル

+0

'me'なしで試してみてください。だから' success:function(xml){setXML(xml); } ' – jcolebrand

答えて

0

。あなたはあなただけthisを使用してなど、個人meを避けることができ、同じオブジェクトの範囲内で作業しているので、あなたのケースでは

を(VARを使用して定義されていない任意の変数がグローバル名前空間に接続されます)、私はそれは混乱だと思います。しかし、そのパラダイムに固執したいのであれば、 var me = this;

あなたの例は本当に不明ですが、どこでエラーが起こりますか?パラメータなしでdata.setXml()を呼び出しているので、me.xmlundefinedに設定されています。これは、メソッドに何も渡さないと期待されます。その瞬間に

data.loadXml(); 
console.log("data.getXML();", data.getXML()); // would be undefined 

data.getXML()それはおそらくあなたの非同期だとまだ不定になります

また、あなたのような何かをした場合による通話の非同期性質のために、ということに注意してください呼び出しがまだ返されていないため、オブジェクトのxml属性が設定されていません。

関連する問題