我正在尝试在创建新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"
}
})
......但我不想要这个。有没有办法改变这种行为?
此外,当我在商店中插入记录时,它会自动添加到关联的网格中,但如果发生错误,它会保留在那里,所以我需要在每个错误上重新加载存储。有没有更好的方法呢?
答案 0 :(得分:10)
你应该抓住两个商店活动中的一个:
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();
您还可以使用商店中的成功和失败事件,根据成功标记执行操作。
答案 1 :(得分:4)
最后,我发现如果我发回空数据,它会按预期工作。所以我不需要发回任何虚构的数据,我的服务器响应是:
({
"success": false,
"message": "some text",
"data": {}
})
答案 2 :(得分: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