2010-04-08 4 views
5

프로토 타입 버전 1.6.0.2 사용.예외를 삼키는 프로토 타입 콜백 함수

일반적으로 Ajax.Request 호출에 대한 응답을 처리하려고 할 때 콜백 함수에서 예외가 발생했을 때 예외가 삼키는 일반적인 문제가 있습니다.

HTML 마크 업 :

<input type="button" id="myButton" value="Press Me" /> 

자바 스크립트 : 다음은 간단한 예입니다

MYSITE = {}; 

document.observe("dom:loaded", function() { 

    // Set up our helper object 
    MYSITE.pageHelper = new MYSITE.PageHelper(); 

}); 


MYSITE.PageHelper = function() { 

    console.log("PageHelper called."); 

    $("myButton").observe("click", this.makeCall.bindAsEventListener(this)); 

}; 

MYSITE.PageHelper.prototype.makeCall = function() { 

    console.log("Make call."); 

    new Ajax.Request(
      "remoteCall.cfm", 
      { 
       method: 'get', 
       parameters: "", 
       onComplete: this.handleCallback.bindAsEventListener(this) 

      }); 


}; 

MYSITE.PageHelper.prototype.handleCallback = function(resp) { 

    console.log("Start callback processing..."); 

    var x = missingVar + "text"; // This line generates an exception... 

    console.log("Finished callback processing."); 
}; 

좋아, 그럼 문제는 방화범이 끌려와 Firefox에서이 코드를 실행하면 예외가 출력되지 것입니다 문제의 라인 - 그것은 삼켰다. 꿀꺽 꿀꺽 마셔. 내가 (디버깅하는 경우) 이들을 잡으려고하는 유일한 방법은 try/catch에서 콜백 함수의 내용을 래핑하는 것입니다. 예 :

MYSITE.PageHelper.prototype.handleCallback = function(resp) { 

    try { 

     console.log("Start callback processing..."); 

     var x = missingVar + "text"; // This line generates an exception... 

     console.log("Finished callback processing."); 

    } catch (e) { 
     console.log(e); 
    } 
}; 

다른 누구도이 문제를 접하게 된 적이 있습니까? 저기있는 일들이 있니?

미리 감사드립니다. 오늘로

답변

4

이 알고있는 행동 :

https://prototype.lighthouseapp.com/projects/8886/tickets/634-no-exception-on-error-in-oncreate-method-of-ajaxrequest

한 워크 : 향상 여기이 삼킨 예외를 처리 할 수있는 티켓이

http://groups.google.com/group/prototype-scriptaculous/browse_thread/thread/e71c7a6bfb656380/7d1c8a23edc07f03?lnk=gst&q=exception+swallowed#

있다 주위에 다음과 같은 코드를 추가하는 것이 좋습니다 (글렌 메이 나드에게 감사드립니다!) :

Ajax.Responders.register({ 
     onException: function(request, exception) { 
       (function() { throw exception; }).defer(); 
     } 
}); 

더 영구적 인 해결책이 구현 될 때까지 동일한 문제를 가진 다른 사람들을 돕는 희망.

+0

인용 한 코드는 AJAX 이벤트에서만 사용하는 것이고 질문에 대한 간단한 onClick 종류의 이벤트에는 적용되지 않는다고 생각합니다. –

+0

이것은 '해결책'입니다! 위에서 설명한대로 Ajax.Responders -> onException 메소드를 구현해야한다. –

+0

이것은 훌륭합니다. 모든 출처와 함께 멋지게 레이아웃 해 주셔서 감사합니다. – febs