2012-12-12 3 views
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(url,parameter,funct){...}

가 응답을받은 후 전달 된 호출 아약스 기능 함수

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

스크립트는 호출 할 때까지 실행됩니다. 방법은 아약스 응답 후,하지만 그때 나는 "this.id 정의되지 않은"오류가 발생

도와주세요.

당신은 그렇지 않으면 글로벌 컨텍스트에서 호출되는 함수에 대한 컨텍스트를 지정해야합니다
+0

프로토 타입에 포함 된'pendingrequests' 객체가 아닌 함수에 대한 참조를 전달하는 것입니다 (프로토 타입 체인에있는 것이지만, 참조 할 때 아무 의미가 없습니다). – Ian

+0

당신이 원하지 않을 수도 있지만, 이것이 구조체가 될 것이라는 것을 안다면 (예를 들어'Ajax'는 항상'PendingRequests' 객체 만 처리합니다),'this.get2 '대신에'this'를 전달하기를 원할 수 있습니다 '를 호출하고,'Ajax' 메쏘드에서'funct' 대신'funct.get2'를 호출하십시오 – Ian

답변

0

, 당신은 아약스 기능의 다른 매개 변수를 수용해야합니다

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

을 그리고 전화 사용하여 함수를 트리거 :

funct.call(context, JSON.parse(XMLHttpRequestObject.responseText)); 
그런 다음 get 함수의 호출은 다음과 같습니다

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

이봐, 난 두 sugges 시도 하지만 여전히 같은 오류가 발생했습니다.

결국 문제가 해결되었습니다.

나는 이안이 제안한 변화를 만들었습니다.

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

: 그것은 여전히 ​​오류를주고 이후

(비록 아약스 함수가 ​​다른 객체를 처리하지만, 그들 모두를 위해 나는 get2 방법을 정의 할 수 있습니다), 나는 모든 속성을 정의 다른 방법 :

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

가 지금은 일하고 ... 난 그냥 하나의 PendingRequests 오브젝트, 그래서 프로토 타입이 나중에 나에게 오류를 제공하지 않습니다 희망을 가질 것이다.