0

我有一个具有两种方法的对象,如图所示:

function PendingRequests(){
    this.count;
    this.id = [];
    this.event = [];
}
PendingRequests.prototype.get = function(){
    var request_parameter = 'cont=pr';
    Ajax(url,request_parameter,this.get2);
}
PendingRequests.prototype.get2 = function(pr){
    this.count = pr.length;
    for(var i=0;i<this.count;i++){
        this.id[i]          = pr[i]['id'];
        this.event[i]       = pr[i]['event'];
    }
}
var pendingrequests = new PendingRequests();

和ajax函数

Ajax(url,parameter,funct){...}

在得到响应后调用传递的函数

funct(JSON.parse(XMLHttpRequestObject.responseText));

脚本一直执行,直到在 ajax 响应后调用该方法,但随后我收到“this.id is undefined”错误

请帮助解决这个问题。

4

2 回答 2

0

您必须为函数分配上下文,否则它将在全局上下文中调用,您必须在 ajax 函数中接受另一个参数:

Ajax(url,parameter,funct, context){...}

然后使用调用触发函数:

funct.call(context, JSON.parse(XMLHttpRequestObject.responseText));

那么get函数中的调用将是:

Ajax(url,request_parameter,this.get2, this);
于 2012-12-12T08:15:29.790 回答
0

嘿,我尝试了这两个建议,但仍然遇到同样的错误。

最后我解决了这个问题。

我做了伊恩建议的改变。(即使 ajax 函数也会处理其他对象,但对于所有这些对象,我可以定义一个 get2 方法)

由于它仍然给出错误,我定义了所有属性:

this.count;
this.id = [];
this.event = [];

以不同的方式:

PendingRequests.prototype.count = 0;
PendingRequests.prototype.id = [];
PendingRequests.prototype.event = [];

现在它正在工作......我将只有一个 PendingRequests 对象,所以希望原型设计以后不会给我任何错误。

于 2012-12-12T18:21:23.570 回答