2013-12-17 6 views
5

Ich möchte eine personalisierte Fehlermeldung erhalten, wenn Sie versuchen, einen Laden zu laden und meine Verbindung mal aus oder die DB es nicht zugänglich ist ... wenn ich eine Ajax Anfrage bin sehr einfach, weil ich bekomme " Antwort“als Parameter entweder Erfolg oder Misserfolg ...ExstJs Store Callback ordnungsgemäße Fehlerbehandlung

Ext.Ajax.request({ 
    url: 'ajax_demo/sample.json', 
    success: function(response, opts) { 
     var obj = Ext.decode(response.responseText); 
     console.dir(obj); 
    }, 
    failure: function(response, opts) { 
     console.log('server-side failure with status code ' + response.status); 
    } 
}); 

aber ich bin mit Problemen konfrontiert, das gleiche zu tun, wenn sie versuchen einen laden zu laden, habe ich eine Callback-Funktion definiert haben, aber ich Aufzeichnungen nur erhalten, Betrieb und Erfolg.

store.load({ 
     callback : function(records, options, success) { 
      if (!success) { 

       // what can I do here to show personalized error sent from server 
      } 
     } 
    }); 

Also, was ist der richtige Weg, eine Antwort wie diese zu handhaben es dem Benutzer zu zeigen?

{"success": false, "msg": "SomeExceptionFromServer"} 

Mit freundlichen Grüßen

+0

Hummm schon gefragt http://stackoverflow.com/questions/16694012/how-to-get-responsecode- Von-Store-Callback obwohl andere Ideen? –

+0

Was genau ist das Problem? Warum verarbeitest du deine JSON-Antwort nicht basierend auf deiner 'Erfolg'-Flagge? – Patrick

+0

Ich mache das, aber ich möchte die Ausnahme vom Server gesendet, wo bekomme ich das? –

Antwort

3

Wenn der Erfolg ist falsch Betrieb nie statt eine Antwort Eigenschaft bekommt es wird eine getError Methode, aber Sie sollten eine message im proxyReader zu arbeiten, um definieren.

Beispiel:

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 
}); 

Umsetzung:

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.'); 
         } 
        } 
       } 
      }); 

Mit freundlichen Grüßen

+0

gibt es einen tollen Thread in Sencha darüber, aber ich konnte es gerade jetzt nicht finden, aber ich werde weiter suchen, um es zu verweisen. –

+0

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

-1

Wenn es einen Fehler, den Sie senden wollen, warum nicht eine leere data Eigenschaft zusammen mit der Fehlermeldung übergeben? Es gibt also keine zu ladenden Datensätze, aber Sie erhalten die Nachricht.

{ 
    "success": false, 
    "msg": "SomeExceptionFromServer", 
    "data": {} 
} 

Möglicherweise müssen data auf Ihre Daten Eigenschaftsnamen ändern.

+0

Wie? Kannst du etwas Code zeigen? –

+0

Nun, können Sie eine erfolgreiche JSON-Antwort vom Server posten? – Patrick

+0

Was ist mit diesem Versuch falsch? – Patrick

0
store.load({ 
     callback : function(records, operation, success) { 

       console.log(operation.getResponse().msg);//this does the trick    

     } 
    }); 
+0

hi, ich habe versucht, das zu bekommen, wenn der erfolg falsch ist, aber aus irgendeinem grund sagt mein fehler undefined. Ich benutze extjs 4.2, irgendwelche Ideen? –

+0

Überprüfen Sie meine neue Antwort –

+1

das funktionierte für Sencha Touch, aber nicht für ExtJs –