2011-11-04 2 views
25

관리자 영역의 다양한 Ext Grid 패널 등에서 서버로 아약스 요청을하는 경우가 있습니다. 예를 들어 활동이 없으면 로그인 한 사용자가 로그 아웃됩니다. 정상 5 분. 이 경우 서버는 로그인 페이지로 리디렉션 403을 되돌려 보냅니다. 은 지금 나는 삽입 오전 :EXTJS 4 - 전역 예외 수신기

listeners:{ 
    exception: function(proxy, response, operation, eOpts) { 
     if(response.status == '403') 
     window.location = 'login'; 
    } 
} 

을 조금 잔인한 모든 스토어의 프록시.
누군가 친절하게도 친절하고 ExtJS와 서버 간의 모든 통신에 청취자를 어떻게 추가 할 수 있는지 알려 주실 수 있습니까? MVC Application Architecture를 사용하여 controller.js 또는 app.js에 하나의 라이너가 될 수 있습니다. 감사합니다

답변

28

귀하의 응용 프로그램의 시작 부분에 다음 발췌 문장을 삽입하십시오. 이 EVERY 응답으로 상점 또는 양식에서 온 것이 든 ...인지 확인되고 로그인 페이지로 리디렉션됩니다.

Ext.Ajax.on('requestexception', function (conn, response, options) { 
    if (response.status === 403) { 
     window.location = 'login'; 
    } 
}); 
+1

에서 자세한 내용을 참조 모두 같은 대답을 주었다. 그래서 그것은 정확해야합니다. – nightwatch

+0

황소 눈! 고마워요. –

+0

고마워요. – pylover

7

나는이 모든 아약스 요청을 잡을하지만 작동해야 서버와의 모든 통신에 AjaxProxy를 사용하는 가정한다면 정말 확실하지 않다 : 는 Ext.Ajax 싱글의 'requestexception'이벤트를 처리 이

Ext.Ajax.on('requestexception', function(conn, response, options, eOpts) { 
    //your error handling here 
}); 

같은 뭔가 나는 그것을 시도하지 않은하지만 당신이 할 경우, 당신은 여기에 업데이 트를 게시 할 수 있을까? 이 포괄 될 것입니다 것을 특징으로

+0

@Sascha, nightwatch 두 분 모두에게 감사드립니다. 그것은 잘 작동합니다. – user798612

6

더 완벽한 해결책은 이것이다 :

Ext.util.Observable.observe(Ext.data.Connection, { 
    requestexception: function(conn, response, options) { 
     if(response.status == '403') 
      window.location = 'login'; 
    } 
}); 

이 기본이되는 클래스가, Ext.data.Connection뿐만 아니라 Ext.Ajax에 사용되지만뿐만 아니라 Ext.data.Proxy로 사용되는 때문이다 에 의해 Ext.data.Store, Ext.data.Model. 이것은 store.load()model.save()과 같은 호출에 대한 예외를 처리합니다. 이것은보다 완전한 catch-all 핸들러 여야합니다.

우리 모두가 동시에이 질문에 대답했다, 재미 my blog post.

+0

Ext.util.Observable.observe는 Ext JS 5.x의 함수가 아닙니다. Ext.Ajax.on을 사용해야합니다. – jprism

+0

아니요, Ext JS 5.0.1에서 'typeof Ext.util.Observable.observe'는''function "'을 출력합니다 – EricLavault