我正在使用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模拟器。有什么方法可以看到它被归还给它了什么?
答案 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似乎无法处理这些响应:
我最终做的是使用Ext.override对这些服务器响应实施正确的客户端响应。
要实现这一点,您必须进行调试(使用Sencha调试库并在那里放置断点,使用JavaScript调试器)并查看应用程序崩溃的位置。然后,您将在崩溃的调用堆栈中找到Ext.data.Reader。 下一步是覆盖其成员函数,如extractData和readRecords,以实现正确的功能(如必要时的空指针检查)。
[edit]相关链接: http://docs.sencha.com/touch/1-1/source/Reader.html#Ext-data-Reader