如何配置 extjs 阅读器来读取这个 json?
Posted
技术标签:
【中文标题】如何配置 extjs 阅读器来读取这个 json?【英文标题】:how to configure extjs reader to read this json? 【发布时间】:2012-02-16 16:08:57 【问题描述】:我已经配置了 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 中没有根?
知道如何正确读取此输出并加载存储吗?
问候
【问题讨论】:
【参考方案1】:当我不设置 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', )
【讨论】:
原来,response
与 JsonP 的 read
方法不同,所以我更正了我的答案。【参考方案2】:
您需要重组返回的 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”视为字符串。
【讨论】:
问题是我无法控制我接收的 json 结构。它是来自不同站点的 api,它提供 json以上是关于如何配置 extjs 阅读器来读取这个 json?的主要内容,如果未能解决你的问题,请参考以下文章