2012-12-12 16 views
0

我具有如示出爲具有兩個方法的對象:傳遞一個oject的方法AJAX - JavaScript的唯一

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是undefined」

請幫助這一點。

+0

你只是傳遞了一個函數的引用(剛好在原型鏈上,但是當你只是引用它時沒有意義),而不是在其原型中包含的pendingrequests對象。 – Ian

+0

你可能不想要這個,但是如果你知道這將是你的結構(例如,'Ajax'將總是隻處理一個'PendingRequests'對象),你可能想要傳遞'this'而不是'this.get2 ',然後在你的'Ajax'方法中,調用'funct.get2'而不是'funct' – Ian

回答

0

必須上下文分配給功能,否則它會在全球範圍內被調用,你必須接受在AJAX功能的其他參數:

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

,然後使用呼叫觸發功能:

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

然後在get函數調用將是:

Ajax(url,request_parameter,this.get2, this); 
0

嘿,我都嘗試sugges tions,但仍然遇到同樣的錯誤。

最後我解決了這個問題。

我做了改變伊恩建議。 (即使AJAX功能也將涉及其他物體,但對於所有的人,我可以定義一個get2方法)

因爲它仍然給錯誤,我定義的所有屬性:

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

以不同的方式:

​​

現在,它的工作......我將只有一個PendingRequests對象,所以希望原型以後不會給我任何錯誤。

相關問題