异常处理 – 使用ajax代理处理Sencha touch Store中的404异常

我正在尝试通过处理可能发生的各种异常来使我的代码更加健壮.一个可能是Json Web请求的404异常.当Json请求获得404异常时,看起来不会调用store.load的回调方法.

代码:

    Ext.regModel('Activiteit', {
    fields: [
        { name: 'id', type: 'int' },
        { name: 'ServerId', type: 'int', mapping: 'Id' },
        { name: 'Title', type: 'string' },
        { name: 'Description', type: 'string' },
    ],
});

Ext.regApplication({
    name: 'App',
    launch: function () {
        console.log('launch');

        var ajaxActiviteitStore = new Ext.data.Store({
            model: "Activiteit",
            storeId: 'ajaxActiviteitStore',
            proxy: {
                type: 'ajax',
                url: '/senchatest/Activiteit/Gett/',
                reader: {
                    type: 'json',
                    root: 'activiteiten'
                }
            }
        });

        ajaxActiviteitStore.load(function (records, operation, success) {
            //the operation object contains all of the details of the load operation
            console.log(success);
        });
    }
});

这导致在sencha-touch-debug.js的第7212行上出现“未捕获的TypeError:无法读取未定义的属性’长度”异常.我正在使用版本1.1.0的sencha touch.

堆栈跟踪:

Uncaught TypeError: Cannot read property 'length' of undefined
Ext.data.Store.Ext.extend.loadRecords  sencha-touch-debug.js:7212
Ext.data.Store.Ext.extend.onProxyLoad  sencha-touch-debug.js:7024
(anonymous function)  sencha-touch-debug.js:8742
Ext.data.Connection.Ext.extend.onComplete  sencha-touch-debug.js:17566
Ext.data.Connection.Ext.extend.onStateChange  sencha-touch-debug.js:17513
(anonymous function)  sencha-touch-debug.js:3421

我在这做错了什么?

我找到了一个解决方法,通过向侦听“异常”事件的代理添加一个侦听器,但我更喜欢调用存储负载的回调函数.我做错了什么,或者这是默认行为?

谢谢,

桑德

最佳答案
如果服务器返回错误(404,500,…),我会遇到与AjaxProxy(ST 1.1.0)相同的异常(Uncaught TypeError:无法读取未定义的属性’length’).

实际上,我认为问题出在Ext.data.AjaxProxy.createRequestCallback方法中.
我用这样的脏代码解决了我的问题:

var ajaxActiviteitStore = new Ext.data.Store({
    model: "Activiteit",
    storeId: 'ajaxActiviteitStore',
    proxy: {
        type: 'ajax',
        url: 'some nonexistent url',
        reader: {
            type: 'json',
            root: 'activiteiten'
        },
        listeners: {
            exception: function(store, response, op) {
               console.log('Exception !');

               // hack to avoid js exception :
               // TypeError: 'undefined' is not an object (evaluating 'records.length')
               // on line sencha-touch-debug-1-1-0.js:7212
               op.records = [];
            }
        }
    }
});

希望这可以提供帮助,我希望在sencha-touch论坛上打开一个问题.

转载注明原文:异常处理 – 使用ajax代理处理Sencha touch Store中的404异常 - 代码日志