2014-03-14 3 views
1

질문을 공식화하는 방법을 모르기 때문에 원하는 경우 언제든지 변경할 수 있습니다.OOP (자바 스크립트 및 콜백 기능 포함)

내 코드가 잘못 되었나요?

(function() { 
//--> DOM is ready 

    var _$ = { 
    g: function(u,c){    // c is callback function 
     x=new XMLHttpRequest(); 
     x.onreadystatechange = function(c){ // same c isn't it?! 
     d="", e=null; 
     if (x.readyState==4) { 
      if (x.status==200) { d = x.responseText; } 
      else { e = x.statusText; } 
      c(e,d);     // how come c is an object 
            // and not a function here?! 
     } 
     } 
     x.open("GET",u,true); x.send(null); 
    } 
    } 

    //--> Call our method: 
    _$.g("http://copy.com/K8UjOnVoyUCiNmPC/qcm/0/1/2.json", 
    function(e,d){ 
     if(!e){ 
     window.alert(d); 
     } 
    } 
); 

//--> .DOM 
})(); 

실마리가 무엇입니까? 그것을 올바르게 만드는 방법?

감사합니다.

+1

형식 매개 변수 목록에 * c *를 포함하는 것은 함수의 맨 처음 줄에 * var *을 선언 할 때와 동일합니다. 즉, 새 로컬 변수 * c *를 만들고, 바깥 쪽 "* c *. – RobG

답변

2

실제로는 cx.onreadstatechange 함수에 전달하지 않고 이벤트로 지정된 매개 변수를 정의하고 있습니다.

. 
. 
. 
var _$ = { 
    g: function(u, c) { 
     x = new XMLHttpRequest(); 
     x.onreadystatechange = function() { // <== REMOVE: c as parameter 
      d = "", e = null; 
      if (x.readyState == 4) { 
       if (x.status == 200) { d = x.responseText; } 
       else { e = x.statusText; } 
       c(e, d); // Now c is the c that you passed into g 
      } 
     } 
     x.open("GET", u, true); 
     x.send(null); 
    } 
} 
. 
. 
. 
+0

고마워요! 내 하루를 만들어. 오늘 너무 많은 코드를 보았습니다! XD 나는 당신의 대답을 올바른 것으로 택할 것입니다. ;) –

1

문제는 당신을 onreadystatechange 콜백에서 c이 진행 이벤트 객체라는 것이다 : 여기에 당신이해야 할 것입니다.

(function() { 
//--> DOM is ready 

    var _$ = { 
    g: function(u,c){    // c is callback function 
     x=new XMLHttpRequest(); 
     x.onreadystatechange = function(){ // same c isn't it?! No, it's a progress event object 
     d="", e=null; 
     if (x.readyState==4) { 
      if (x.status==200) { x.responseText; } 
      else { e = x.statusText; } 
      c(e,x.response);     // how come c is an object 
            // and not a function here?! 
     } 
     } 
     x.open("GET",u,true); x.send(null); 
    } 
    } 

    //--> Call our method: 
    _$.g("http://copy.com/K8UjOnVoyUCiNmPC/qcm/0/1/2.json", 
    function(e,d){ 
     if(!e){ 
     window.alert(d); 
     } 
    } 
); 

//--> .DOM 
})(); 

내가이 도움이되기를 바랍니다 :이 c 매개 변수는 다음과 같이 콜백을 참조 할 수있는 폐쇄를 제공의와 그 문제에 대한 해결책은 단순히 매개 변수를 제거하고 부모 방법을 _$.g을 수 있도록하는 것입니다!

+1

고마워요! 물론 도움이되었습니다! ;) –