1

タイトルが少し混乱していることは承知していますが、詳細は次のとおりです。

JavaScript で定義されたカスタム オブジェクトがあり、その中で定義されたパブリック メンバーがあるとします。

 function Test()
 {
   this.testArray = [];
 }

このオブジェクトには 2 つのメソッドがあります。1 つは、いくつかの xml ファイルを読み取り、配列に入力します。

 Test.prototype.readXML = function()
 {
   var self = this;
   $.get('assest/xml/mydata.xml', function(d){
    $(d).find("item").each(function(){
            var item = new Item;
            item.ID = ($(this).attr("ID"));
            item.body = ($(this).find("body").text());
            });
     self.testArray.push(item);
   });
   }

そして、コンテンツを HTML ページに表示する別の関数。

  Test.prototype.appendInfo = function()
  {
     var i;
     for (i=0; i<testArray.length;i++)
     {
       $('#testdisplay').append(testArray[i].ID +"<br />");
       $('#testdisplay').append(testArray[i].body = "<br /");
      }
   }

ただし、表示機能を続行すると、testArrayが定義されていないというエラーが表示されます。表示機能を読み取り機能の後ろに置いているので、どこに問題があるのか​​ わかりません。データは配列に格納され、必要なときにいつでもアクセスできると期待しています。

誰かが親切にこれについて私を助けてくれることを願っています! ありがとうございました!} }

4

2 に答える 2

2

したがって、あなたのコードには 2 つの問題があることに気付きました。

最初に ajax 呼び出しを行うときは、遅延オブジェクトをユーザーに返す必要があります。ajax 呼び出しは非同期であるため、すぐには終了しない場合があります。

したがって、readXML 関数でこれを行う必要があります。jquery get を返す必要があります。

Test.prototype.readXML = function() {
   var self = this;
   return $.get('assest/xml/mydata.xml', function(d){
        $(d).find("item").each(function(){
            var item = new Item;
            item.ID = ($(this).attr("ID"));
            item.body = ($(this).find("body").text());
        });
        self.testArray.push(item);
   });
}

次に、2 番目の関数の追加でコンテキストが欠落していました。

Test.prototype.appendInfo = function() {
    var i;
    for (i=0; i<this.testArray.length;i++) {
       $('#testdisplay').append(this.testArray[i].ID +"<br />");
       $('#testdisplay').append(this.testArray[i].body = "<br /");
    }
}

したがって、コードは次のようになります。

var mytest = new Test();

mytest.readXML().done(function(){
    mytest.appendInfo();
}).fail(function(){
    // put some fallback code here
});

更新: これを追加しました。

于 2012-08-27T17:42:30.517 に答える
0

testArrayあなたの関数にはありませappendInfo()ん。そのため、定義されていないと言います。this.testArray代わりに使用する必要があります。

scope 内で宣言された変数を使用するたびに、使用している関数の外で使用する必要がありますthis.yourVariable

于 2012-08-27T17:48:50.290 に答える