2009-05-10 2 views
1

프로토 타입에서 Ajax 객체를 예외를 삼키는 것을 막는 가장 편리한 방법은 무엇입니까?

new Ajax.Request('?service=example', { 
    parameters : {tags : 'exceptions'}, 
    onSuccess : this.dataReceived.bind(this) 
}); 

Ajax 객체에 의해 호출 될 때 dataReceived 함수에서 예외가 발생하면 예외 처리 코드에 의해 삼켜지고 전체 프로세스가 자동 종료됩니다. 예외는 브라우저에 던지지 않으며 이해하기 쉬운 이유로 디버깅하는 것이 약간 지루합니다. 이것이 일어나는 것을 막기위한 간단한 방법이 있습니까?

답변

2

난 당신이 요청 옵션과 onException 콜백 핸들러 포함 할 수 있다고 생각 :

new Ajax.Request('?service=example', { 
    parameters : {tags : 'exceptions'}, 
    onSuccess : this.dataReceived.bind(this), 
    onException : function(request, ex) { // react somehow } 
}); 

글로벌 수준에 그것을하기를, 콜백 핸들러는 Ajax.Responders object에 등록 할 수 있습니다

Ajax.Responders.register({ 
    onException: function(request, ex) { 
    // react somehow 
    } 
}); 

첫 번째 인수는 콜백을 트리거 한 Ajax.Request 개체입니다.

P.S./FYI : 귀하의 예외가 Prototype source에서이 코드에 의해 은폐되고 :

dispatchException: function(exception) { 
    (this.options.onException || Prototype.emptyFunction)(this, exception); 
    Ajax.Responders.dispatch('onException', this, exception); 
} 
다음

제대로 onException 콜백을 구현하는 방법은 다음과 같습니다.

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

여기에 기록으로 : https://stackoverflow.com/a/2606239/147349

+0

은 내가 onException 매개 변수 알고 있지만, Ajax.Responders.register 기능은 나에게 새로운이었다. 나는 모든 오류는 내 요구에 응답 할이 코드를 디버깅하는 동안 브라우저에 유출 할 경우 Ajax.Responders.register ({ onException : 기능 (요청, 예) { (디버그) {던져 전 경우;} } }}); 그런 다음 브라우저로 던진 Ajax 객체에서 호출 된 코드 내에서 모든 오류가 발생하도록하려면 디버그 플래그를 true로 설정해야합니다. 고맙습니다! –

+0

도와 드리겠습니다. 이 답이 문제를 해결하면 "수락"으로 표시 할 수 있습니다. :) – Tomalak

+0

죄송합니다. 나, 새로운 여기에, 그래서 나는 루틴을 몰랐다 :) –

관련 문제