以下代理在零星的时刻抛出listener
个例外。我添加了一个timeout:100
来尝试重新创建错误,并且每次都成功抛出它。
但是,在default 30秒内的请求有时会发生错误。
除了超时之外还有什么会导致listener
异常被抛出?错误日志中没有任何信息。
proxy: {
type: 'rest',
url: '/data/identity',
reader: {
type: 'json',
successProperty: 'success',
messageProperty: 'message'
},
writer: {
type: 'json',
writeAllFields: true
},
listeners: {
exception: function(proxy, response, operation, eOpts){
if(operation.action === "read"){
Ext.Msg.alert('Error Retrieving', response.responseText);
}else if(operation.action === "create"){
Ext.Msg.alert('Error Creating', response.responseText);
}else if(operation.action === "update"){
Ext.Msg.alert('Error Updating', response.responseText);
}
}
}
}
答案 0 :(得分:3)
operation
对象包含有关错误的信息。它有一个方法getError()
来获取错误的描述。这可能会显示您正在查找的错误消息:
var error = operation.getError()
if(error.status && error.statusText){
Ext.Msg.alert('Error', 'Error ' + error.status + ': ' + error.statusText)
}
这是我在代理中使用的代码。除了显示operation
期间抛出的错误外,它还会显示服务器端发生的任何错误(我捕获它们并将它们发送到json数据的msg
属性中)。我检查navigator.onLine
的原因是我的应用程序使用了应用程序缓存。
listeners: {
exception: function(proxy, response, operation){
var error = operation.getError(),
errorMsg;
if(!navigator.onLine){
errorMsg = Lang._('You are not connected to internet.')
} else if(Ext.isObject(error)){
if(error.status && error.statusText)
errorMsg = 'Error ' + error.status + ': ' + error.statusText
else
errorMsg = Ext.encode(error)
} else if(response.responseText) {
var json = Ext.decode(response.responseText);
errorMsg = json.msg
}
Ext.Msg.show({
title: Lang._('Error loading external data'),
msg: errorMsg,
icon: Ext.MessageBox.ERROR,
buttons: Ext.Msg.OK
})
}
}