2011-02-28 4 views
6

Ext.data.Store 인스턴스에서 예외를 처리하려고 할 때 새 Ext.data.Record을 만들려고합니다. 서버가 다음 json으로 응답하는 경우 :extjs 저장 오류 처리

{"success": false, "message": "some text"} 

서버가 HTTP 200 응답을 반환하더라도 '요청'유형은 예외입니다!

root 재산

({ 
    "success": false, 
    "message": "some text", 
    "data": { 
     "PositionId": "00000000-0000-0000-0000-000000000000", 
     "Name": "123" 
    } 
}) 

으로 객체를 생성하기 위해 내가 가지고 '원격'오류가 발생합니다 ...하지만 나는 이것을 원하지 않는다. 이 동작을 변경할 수있는 방법이 있습니까?

또한 저장소에 레코드를 삽입하면 해당 그리드에 자동으로 추가되지만 오류가 발생하면 해당 테이블에 남아 있으므로 모든 오류에 저장소를 다시로드해야합니다. 이 작업을 수행하는 더 좋은 방법이 있습니까?

+0

당신이 당신의 질문에 약간을 구축 할 수 있습니다 code4jhon @

storeSegurosCancelacion.load({ params: { 'sucursal':sucursal, 'persona': persona }, callback:function(records, operation, success){ msg.hide(); if(success == true){ if(records.length == 0){ Ext.Msg.alert('Resultado', 'No se ha encontrado información'); } } if(success == false){ try{ Ext.Msg.alert('Error', operation.getError()); // way more elegant than ussing rawData etc ... }catch(e){ Ext.Msg.alert('Error', 'Error inesperado en el servidor.'); } } } }); 

감사합니다? 예를 들어보고있는 '요청'또는 '원격'오류가 발생한 위치는 어디입니까? 저장소의 'loadexception'수신기에 있으면 '응답'및 '원격'예외 유형 만 있어야합니다. '요청'오류는 어디에서 볼 수 있습니까? 코드 예제를 제공 할 수 있다면 질문에 대한 답변에 더 도움이 될 것입니다. –

답변

4

마지막으로 빈 데이터를 다시 보내면 예상대로 작동한다는 것을 알게되었습니다. 따라서 허구의 데이터를 다시 보낼 필요가 없습니다. 내 서버 응답은 다음과 같습니다.

({ 
    "success": false, 
    "message": "some text", 
    "data": {} 
}) 
+0

조금 더 자세한 정보가 있습니까? 나는 동일한 시도했지만 여전히 다시 눈금을 다시로드해야합니다 : ( – Leonid

+1

응답에 루트 속성이 없을 때 독자가 실패하고로드 이벤트가 발생하지 않는다고 생각합니다. 그러나 빈 결과 이벤트를 보내면 "로드"트리거 및 당신은 this.getProxy(). getReader(). rawData; – meta

+0

과 같이 반환 된 json (적어도 ext4.2에서)을 검사 할 수 있습니다. 성공하면 false로 작업 객체의 응답 속성에 액세스 할 수 없습니다. http : //를 참조하십시오. www.sencha.com/forum/showthread.php?196013-access-operation.response-when-success-false –

10

당신은이 스토어 이벤트 중 하나 잡을해야합니다

  1. loadexception (사용되지 않음)
  2. exception

당신이 할 수 예를 들면 :

// make the store 
var myStore = new Ext.data.Store({...}); 
// catch loading exceptions 
myStore.on('exception',function(store, records, options){ 
    // do something about the record exception 
},this); 
// load store 
myStore.load(); 

을 당신은 또한 수 단지 성공사용및 실패 이벤트는 상점에서 성공을 기반으로 조치를 취합니다. 플래그.

0

성공이 거짓이면 작업에 응답 특성이 없습니다. 이 스레드는 매우 clairly 그것을 설명합니다!

http://www.sencha.com/forum/showthread.php?196013-access-operation.response-when-success-false

예 :

Ext.define("SC.store.SegurosCancelacionStore", { 
    extend: "Ext.data.Store", 
    model: "SC.model.PersonaSeguro", 
    proxy: { 
     timeout: 90000, 
     actionMethods: { 
      read : 'POST' 
     }, 
     type: "ajax", 
     url: "../SegurosFinsolCancelacionServlet", 
     reader: { 
      type: "json", 
      root: "seguros", 
      messageProperty : 'msjError' //without this, it doesn't work 
     } 
    }, 
    autoLoad: false 
}); 

구현 :