诊断空店负荷

时间:2011-11-17 05:10:48

标签: javascript json extjs

我正在使用Sencha Touch移动应用程序调用网络服务:

Ext.regModel('BaseResponse', {
    idProperty: 'ResponseTime',
    fields: [
        { name: 'ErrorMessage', type: 'string' },
        { name: 'ResponseTime', type: 'date', dateFormat: 'c' },    
        { name: 'StatusCode', type: 'string' },
        { name: 'Success', type: 'string' }

    ]
});


var declineResult =  new Ext.regStore('declineResult', 
    {
            model: 'BaseResponse',
            proxy : {
            type : 'ajax',
            dataType: "json",
            url : App.BaseURL + '/SetJobResponse/' + options.jobId + '/' + STCID +'/' + options.OJSStatusID + '/' + device.uuid,
            reader: new Ext.data.JsonReader ({
               type: 'json'
                })
        },
            listeners: 
            {
            'load': function(store,records,successful)
                {                           
                alert(records.length);
                //alert('response message:' + Ext.StoreMgr.get("declineResult").getAt(0).ErrorMessage);
                },

            'loadexception': function()
            {
                alert('There was a load exception');
            }
            }
    });

    Ext.StoreMgr.get("declineResult").load();    

如果我只是浏览它,这是URL返回的JSON:

{"ErrorMessage":"You are not authorised","ResponseTime":"\/Date(1321447985287)\/","StatusCode":401,"Success":false}

然而,即使我的加载事件显示Successful = true,记录也是空的(长度为0)。 异常事件未被触发。 我该如何进一步诊断?我正在使用Eclipse与Sencha Touch和Phonegap与Android模拟器。有什么方法可以看到它被归还给它了什么?

2 个答案:

答案 0 :(得分:0)

我最终通过消除对商店的需求来解决这个问题:

Ext.regController('RequestDetailsC', {
    userSettings: function() {
    console.log('reqdetails controller called.');
    },

    declineRequest: function(options) {
        console.log('decline called.');

        var STCID = '8';

        Ext.Ajax.request({
            url: App.BaseURL + '/SetJobResponse/' + options.jobId + '/' + STCID +'/' + options.OJSStatusID + '/' + device.uuid,
            method: 'GET',
            success: function(result, request) {
                var resultJson = Ext.decode(result.responseText);
                alert(resultJson.ErrorMessage);
            },
            failure: function(result, request) {
                Ext.Msg.alert('Error!', 'There was a problem while loading the data...');
            }
        });             

    }

答案 1 :(得分:0)

我发现Sencha 1.x似乎无法处理这些响应:

  • 404
  • 一个空的JSON数据数组
  • 返回单个对象而不是数组

我最终做的是使用Ext.override对这些服务器响应实施正确的客户端响应。

要实现这一点,您必须进行调试(使用Sencha调试库并在那里放置断点,使用JavaScript调试器)并查看应用程序崩溃的位置。然后,您将在崩溃的调用堆栈中找到Ext.data.Reader。 下一步是覆盖其成员函数,如extractData和readRecords,以实现正确的功能(如必要时的空指针检查)。

[edit]相关链接: http://docs.sencha.com/touch/1-1/source/Reader.html#Ext-data-Reader