диагностика загрузки пустого магазина - PullRequest
0 голосов
/ 17 ноября 2011

Я звоню в веб-службу с помощью моего мобильного приложения 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();    

Вот JSON, возвращаемый URL-адресом, если я просто просматриваю его:

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

Однако, несмотря на то, что мое событие загрузки показывает Successful = true, записи пустые (длина 0). Событие исключения не вызывается. Как я могу диагностировать это дальше? Я использую Eclipse с Sencha Touch и Phonegap с эмулятором Android. Есть ли способ узнать, что ему возвращают?

Ответы [ 2 ]

0 голосов
/ 02 декабря 2011

Я обнаружил, что Sencha 1.x не в состоянии обработать эти ответы:

  • 404
  • пустой массив данных JSON
  • один объект, возвращаемый вместо массива

В итоге я использовал Ext.override для реализации правильных клиентских ответов на эти ответы сервера.

Чтобы это работалоВы должны отладить (используйте библиотеки отладки Sencha и разместите там точки останова, используя отладчик JavaScript) и посмотрите, где происходит сбой вашего приложения.Затем вы найдете Ext.data.Reader в стеке вызовов вашей аварии.Следующим шагом является переопределение его функций-членов, таких как extractData и readRecords, для реализации надлежащей функциональности (например, проверки нулевого указателя при необходимости).

[править] Соответствующая ссылка: http://docs.sencha.com/touch/1-1/source/Reader.html#Ext-data-Reader

0 голосов
/ 22 ноября 2011

В итоге я обошел его, избавившись от необходимости в магазине:

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

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...