【问题标题】:ExstJs Store callback proper error handlingExstJs Store 回调正确的错误处理
【发布时间】:2013-12-17 16:39:02
【问题描述】:

我想在尝试加载商店并且我的连接超时或无法访问数据库时收到个性化错误消息......当我执行 Ajax 请求时非常容易,因为我得到“响应”作为参数在成功或失败中......

Ext.Ajax.request({
   url: 'ajax_demo/sample.json',
   success: function(response, opts) {
      var obj = Ext.decode(response.responseText);
      console.dir(obj);
   },
   failure: function(response, opts) {
      console.log('server-side failure with status code ' + response.status);
   }
});

但是我在尝试加载商店时遇到了同样的问题,我定义了一个回调函数,但我只接收记录、操作和成功。

store.load({
        callback : function(records, options, success) {
            if (!success) {

              // what can I do here to show personalized error sent from server
            }
        }
    });

那么,处理这样的响应以将其显示给用户的正确方法是什么?

{"success": false, "msg": "SomeExceptionFromServer"}

最好的问候

【问题讨论】:

  • Hummm 已经问过stackoverflow.com/questions/16694012/… 还有其他想法吗?
  • 到底是什么问题?为什么不根据您的 success 标志处理您的 json 响应?
  • 我这样做了,但我想显示从服务器发送的异常,我从哪里得到呢?
  • callback 中的哪里获取 json 字符串?

标签: extjs


【解决方案1】:

当成功为假时,操作永远不会获取响应属性,而是获取 getError 方法,但您应该在 proxyReader 中定义 messageProperty 才能正常工作。

例子:

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

最好的问候

【讨论】:

  • Sencha 中有一个很棒的帖子关于这个,但我现在找不到它,但我会继续寻找它来参考它。
【解决方案2】:
store.load({
        callback : function(records, operation, success) {

              console.log(operation.getResponse().msg);//this does the trick            

        }
    });

【讨论】:

  • 嗨,如果错误,我试图在成功时得到这个,但是由于某种原因,我的错误是未定义。我正在使用 extjs 4.2,有什么想法吗?
【解决方案3】:

如果您要发送错误,为什么不将空的data 属性与错误消息一起传递?因此没有要加载的记录,但您会收到消息。

{
    "success": false,
    "msg": "SomeExceptionFromServer",
    "data": {}
}

您可能需要将 data 更改为您的数据属性名称。

【讨论】:

猜你喜欢
  • 2017-08-09
  • 2016-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-08
  • 1970-01-01
相关资源
最近更新 更多