1

我知道标题有点混乱,这里是详细信息:

假设我在 javascript 中定义了一个自定义对象,并且其中定义了一个公共成员:

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

我对这个对象有两种方法,一种是读出一些 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

所以我注意到你的代码有两个问题。

首先,当您进行 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);
   });
}

接下来,您的第二个函数 append 只是缺少一些上下文。

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改用。

每次你想使用在你的作用域内声明的变量,但在你正在使用的函数之外,你必须使用this.yourVariable

于 2012-08-27T17:48:50.290 回答