我已配置extjs存储来从useragentstring.com api加载数据,这个api返回这样的数据
{"agent_type":"Browser","agent_name":"Opera","agent_version":"9.70","os_type":"Linux","os_name":"Linux","os_versionName":"","os_versionNumber":"","os_producer":"","os_producerURL":"","linux_distibution":"Null","agent_language":"English - United States","agent_languageTag":"en-us"}
Ext.define('Oms.model.Userinfo', {
extend : 'Ext.data.Model',
fields : ['agent_type', 'agent_name', 'agent_version', 'os_type', 'os_name']
});
Ext.define('Oms.store.Userinfo', {
extend : 'Ext.data.Store',
model : 'Oms.model.Userinfo',
proxy: {
type : 'jsonp',
reader : {
type: 'json',
root: ''
}
}
});
此商店抛出错误
也许会发生这种情况,因为这个json中没有root?
任何想法如何正确阅读此输出和加载存储?
此致
答案 0 :(得分:5)
当我未设置root
或将其设置为undefined
时,它适用于我。
您也可以延长Ext.data.reader.Json
来调整对您需求的响应。例如:
Ext.define('Ext.data.reader.JsonPWithoutRoot', {
extend: 'Ext.data.reader.Json',
read: function(response) {
return this.callParent([ { root: response } ]);
},
root: 'root'
});
然后在代理中定义它:
proxy: {
type: 'jsonp',
callbackKey: 'method',
url: 'http://localhost/ext4/data3.php',
reader: Ext.create('Ext.data.reader.JsonPWithoutRoot', {})
}
答案 1 :(得分:-1)
您需要重新构建返回的json对象,使其看起来更像:
{
root: {
"agent_type":"Browser",
"agent_name":"Opera",
"agent_version":"9.70",
"os_type":"Linux",
"os_name":"Linux",
"os_versionName":"",
"os_versionNumber":"",
"os_producer":"",
"os_producerURL":"",
"linux_distibution":"Null",
"agent_language":"English - United States",
"agent_languageTag":"en-us"
}
}
当您定义JsonReader的根时,您告诉读者它应该在对象中的哪个位置。这样做是为了让您可以在同一请求中为不同的商店返回JSON中的多个对象。
作为旁注,你可能想看看你如何处理来自PHP的Null值......你可能会发现你需要处理从后端替换“Null”,因为我相信ExtJS会将“Null”视为一个字符串。