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

前端之家收集整理的这篇文章主要介绍了异常处理 – 使用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',],});

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",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相关文章