6

我试图Ext.data.Store在创建新的Ext.data.Record. 当服务器使用以下 json 响应时:

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

即使服务器返回 HTTP 200 响应,我也会收到“请求”类型的异常!

要获得“远程”错误,我必须使用该root属性创建一个对象

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

...但我不想要这个。有没有办法改变这种行为?

此外,当我在存储中插入一条记录时,它会自动添加到关联的网格中,但如果发生错误,它仍然存在,所以我需要在每个错误时重新加载存储。有没有更好的方法来做到这一点?

4

3 回答 3

11

您应该捕获两个 Store 事件之一:

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

您也可以仅使用商店中的成功失败事件根据成功标志采取行动。

于 2011-03-30T21:14:07.257 回答
4

最后,我发现如果我发回空数据,它会按预期工作。所以我不需要发回任何虚构的数据,我的服务器响应是:

({
    "success": false,
    "message": "some text",
    "data": {}
})
于 2011-04-04T06:42:41.213 回答
0

当成功为假时,操作没有响应属性。这个线程解释得很清楚!

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

执行:

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

最好的问候@code4jhon

于 2014-05-12T23:32:54.420 回答