2012-04-20 10 views
7

Estoy teniendo un problema con la obtención del response.responseText de la respuesta del servidor en extjs 4.cómo obtener el response.responseText servidor después de extjs carga almacén 4

A continuación se muestra el código para cargar la tienda:

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

En realidad, cuando realicé la solicitud con la siguiente función, obtuve correctamente el 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'); 
    } 
}); 

Así que por favor me sugieren cómo puede conseguir que la response.responseText del store.load() tiene una función de devolución de llamada.

Respuesta

7

devolución de llamada tiene 3 parámetros ... Prueba esto:

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

que no tienen "operation.response" cuando el servidor devuelve 500. Cuando la respuesta del servidor el mensaje de error con el estado 500, tengo que usar Ext.Ajax.request para mostrar el mensaje y StackTrace. – df1

1

me he enfrentado a un problema similar usando Model.load(...), pero en mi caso, operation.response no se definió. Por lo tanto, he encontrado otra manera de conseguirlo:

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

En extjs 3.4 se puede utilizar este:

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

Esta propiedad store.reader.jsonData volverá respuesta completa.

Quizás para alguien sería útil en extjs 3.

1

También puede probar este ..

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

esto es lo que estoy buscando. el parámetro 'response' en la función' callback' de 'store.load' no estaría definido si 'success == false' –

0

En Extjs 4.x que está dando como esto

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

En Extjs 5 tienes que hacer como este myStore.load({ url: 'myurl', method: 'GET', callback: function(records, operation, success) { var message=forecastMethodStore.getProxy().getReader().rawData.message; } });

Pero el punto clave aquí es que debe establecer el mensaje en respuesta JSON desde el lado java. Ejemplo: "{\" Root \ ": [], \" message \ ": \" duplicates \ "}"

Espero que esto ayude a alguien.

+0

Usando ExtJs 4.1.3 y no tengo respuesta sobre la operación. – cmart

0

Debe establecer messageProperty en proxy reader en su 'Ext.data.Store'.

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

cuando mySuccess vuelve false luego se invoca 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); 
       } 
      } 
     } 
    }); 

Aquí está un retorno json de 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);