EXT JS代理抛出错误

时间:2015-07-18 17:00:32

标签: json rest extjs proxy extjs4.2

以下代理在零星的时刻抛出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);
                    }
                }
            }
        }

1 个答案:

答案 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
        })
    }
}