我知道标题有点混乱,详情如下:
假设我在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。我不确定问题出在哪里,因为我将显示功能放在阅读功能之后。我希望数据将存储在数组中,并且可以在需要时随时访问。
希望有人能帮助我解决这个问题!谢谢! } }
答案 0 :(得分: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);
});
}
接下来,你的第二个函数追加只是缺少一些上下文。
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
});
更新: 添加了额外的。
答案 1 :(得分:0)
testArray
函数中没有appendInfo()
,这就是为什么它没有定义。您应该使用this.testArray
代替。
每次要使用在范围中声明的变量,但在所使用的函数之外的时,必须使用this.yourVariable