extjs存储错误处理
我试图在创建新的Ext.data.Record
时处理Ext.data.Store
实例中的异常。当服务器使用以下json响应时:即使服务器返回HTTP 200响应,我也会得到'request'类型的异常!extjs存储错误处理
为了得到一个“远程”的错误,我必须与root
财产
({
"success": false,
"message": "some text",
"data": {
"PositionId": "00000000-0000-0000-0000-000000000000",
"Name": "123"
}
})
创建一个对象......但我不想这样。有什么方法可以改变这种行为吗?另外,当我在存储中插入一条记录时,它会自动添加到关联的网格,但是如果发生错误,它仍然存在,因此我需要在每次错误时重新加载存储。有没有更好的方法来做到这一点?
最后,我发现如果我发回空数据,它按预期工作。所以我不需要回送任何虚构的数据,我的服务器响应是:
({
"success": false,
"message": "some text",
"data": {}
})
我可以稍微详细一点吗?我试过同样的,但仍然必须重新加载网格:( – Leonid 2012-02-24 13:42:19
我认为当你没有响应的根属性,阅读器失败,加载事件不会触发。但是当你发送空结果事件“加载”触发器和您可以检查返回的json(至少在ext4.2中),如下所示:this.getProxy()。getReader()。rawData; – meta 2013-05-02 08:32:32
当成功为false时,您无法访问操作对象的响应属性,请参阅http://万维网。sencha.com/forum/showthread.php?196013-access-operation.response-when-success-false – 2014-05-26 18:13:22
你应该抓住这两个商店的事件之一:
-
loadexception
(不建议使用) 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();
你也可以只使用成功和失败事件从商店采取行动根据成功标志。
时成功是假的操作不会有响应特性。这个线程非常好地解释它!
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
你可以以你的问题一点?例如,您在哪里看到“请求”或“远程”错误?如果它位于商店的'loadexception'侦听器中,那么它应该只有'response'和'remote'的异常类型。你在哪里看到'请求'错误?如果您可以提供代码示例,那将更好地帮助解答您的问题。 – 2011-03-11 16:30:21