2012-04-20 4 views
7

Sto avendo un problema con ottenere il response.responseText dalla risposta del server in ExtJS 4.come ottenere il response.responseText server dopo carico negozio extjs 4

Qui di seguito è il mio codice per caricare il negozio:

store.load({ 
    params: { 
     'projectid': this.projectid 
    }, 
    callback: function (records, operation, success, response) { 
     console.log(records); 
     console.log(response.responseText); 
    } 
}); 

In realtà, quando ho effettuato la richiesta con la funzione di seguito, ottengo correttamente il reponse.responseText.

Ext.Ajax.request({ 
    url: 'login/GetLoginCheck.action', 
    method: 'GET', 
    params: { 
     'username': values['username'], 
     'password': values['password'] 
     }, 
    scope: this, 
    success: function(response) { 
     Ext.Msg.alert(response.responseText); 
     var redirect = response.responseText; 
     window.location.href = "" + redirect + ".jsp"; 
    }, 
    failure: function(response) { 
     Ext.Msg.alert('INVALID USERNAME OR PASSWORD'); 
    } 
}); 

Quindi, per favore mi suggeriscono come posso ottenere il response.responseText dal store.load() con una funzione di callback.

risposta

7

callback ha 3 parametri ... provare questo:

store.load({ 
    params: { 
     'projectid': this.projectid 
    }, 
    callback: function (records, operation, success) { 
     console.log(operation.response.responseText); 
    } 
}); 
+3

io non hanno alcun "operation.response" quando il server restituisce 500. Quando la risposta del server il messaggio di errore con lo stato 500, devo usare Ext.Ajax.request per mostrare il messaggio e stacktrace. – df1

1

ho affrontato un problema simile con Model.load(...), ma nel mio caso, operation.response non è stato definito. Così, ho trovato un altro modo per farlo:

Model.load(1, { 
    success: function() { 
     // I haven't tested inside this callback yet 
    }, 
    failure: function (record, operation) { 
     var response = operation.request.proxy.reader.rawData; 
     alert(response.message); 
    } 
}); 
0

In extjs 3.4 è possibile utilizzare questo:

this.historyInvoiceHeaderGrid.store.load({ 
     params:{start:0, limit:20}, 
     callback: function (records, operation, success) { 
      console.log(this.reader.jsonData); 
     }}); 

Questa struttura store.reader.jsonData tornerà risposta completa.

Forse per qualcuno sarebbe utile in ExtJS 3.

1

Si può anche provare questo ..

Ext.create('Ext.data.Store',{ 
    fields[], 
    proxy:{url:'store_url.json', reader:{type:'json',root:'data'}}, 
    autoLoad:true, 
    listeners:{ 
     load:function(store, record, success, opts){ 
      var response_text = store.proxy.reader.rawData; 
      console.log(response_text); 
     } 
    } 
}) 
+0

questo è quello che sto cercando. il parametro 'response' nella funzione' callback' di 'store.load' sarebbe indefinito se 'success == false' –

0

In ExtJS 4.x si sta lavorando in questo modo

myStore.load({ url: 'myurl', method: 'GET', callback: function(records, operation, success) { var jsonStr = Ext.JSON.decode(operation.response.responseText); alert(jsonStr.message); } });

In Extjs 5 è necessario fare così myStore.load({ url: 'myurl', method: 'GET', callback: function(records, operation, success) { var message=forecastMethodStore.getProxy().getReader().rawData.message; } });

Ma il punto chiave qui è che dovresti impostare il messaggio nella risposta JSON dal lato java. Esempio: "{\" Root \ ": [], \" messaggio \ ": \" duplicati \ "}"

Spero che questo possa aiutare qualcuno.

+0

usando ExtJs 4.1.3 e non ho alcuna risposta sull'operazione. – cmart

0

È necessario impostare messageProperty in proxy reader nel numero 'Ext.data.Store'.

  reader: { 
       type: 'json', 
       root: 'myDataList', 
       totalProperty: 'myTotalRecord', 
       successProperty: 'mySuccess', 
       messageProperty : 'myMsg' 
      } 

quando mySuccess ritorna false poi invocato callback: function.

store.load({ 
     params: {start: 0, limit: 15}, 
     callback: function (records, operation, success) { 
      if (!success) { 
       try { 
        Ext.Msg.alert('Sorry !', operation.getError()); 
        // operation.getError() returns myMsg value 
       }catch (e){ 
        Ext.Msg.alert('Exception !', e); 
       } 
      } 
     } 
    }); 

Ecco un ritorno JSON da Java Servlet.

Map<String, Object> myDataMap = new HashMap<>(3); 
    try { 
     // Something 
     myDataMap.put("mySuccess", true); 
     myDataMap.put("myMsg", "Whats up khomeni !"); 
    } catch (Exception e) { 
     myDataMap.put("mySuccess", false); 
     myDataMap.put("myMsg", "Whats wrong with me."); 
    } 
    String json = new Gson().toJson(myDataMap);