Sencha Touch网络应用程序从REST Web服务提交的JSON加载商店。对于其他技术要求,JSON不是标准的(但仍然有效)并遵循以下模式:
{
"101": {
"id": "101",
"title": "title 101",
"description": "description 101",
"order": "20",
"thumb": {
"id": "10101",
"uri": "http://linktothumb.jpg"
},
"parent": "0",
"cType": "5"
},
"102": {
"id": "102",
"title": "title 102",
"description": "description 102",
"order": "59",
"thumb": {
"id": "10102",
"uri": "http://linktothumb.jpg"
},
"parent": "101",
"cType": "5"
}
}
不幸的是,当我执行myStore.load()时,ST无法解析JSON,并且数据未添加到商店。但是如果JSON响应遵循以下模式,它将起作用:
[
{
"id": "101",
"title": "title 101",
"description": "description 101"
"thumb": {
"id": "10101",
"uri": "http://linktothumb.jpg"
},
"parent": "0"
},
{
"id": "102",
"title": "title 102",
"description": "description 102"
"thumb": {
"id": "10102",
"uri": "http://linktothumb.jpg"
},
"parent": "101"
}
]
我无法更改JSON的格式,因此我需要找到一种方法来使其与此响应一起使用。是否可以将参数添加到ST的JSON阅读器中,还是可以手动解析JSON响应?如果是,怎么样?
这是我商店的代理:
proxy: {
type:'rest',
useDefaultXhrHeader : false,
headers: {
'Accept': 'application/json'
},
reader: {
type:'json'
}
}
答案 0 :(得分:1)
您可以创建自定义阅读器:
Ext.define("App.data.reader.MyReader", {
extend: 'Ext.data.reader.Json',
getResponseData: function(response) {
var data, error;
try {
data = this.parseResponse(Ext.decode(response.responseText));
return this.readRecords(data)
} catch (ex) {
error = new Ext.data.ResultSet({
total : 0,
count : 0,
records: [],
success: false,
message: ex.message
});
this.fireEvent('exception', this, response, error);
Ext.Logger.warn('Unable to parse the JSON returned by the server');
return error;
}
},
parseResponse: function(data) {
return data;
}
});
通过自定义parseResponse,您可以按照自己的方式处理数据。