如何配置 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?的主要内容,如果未能解决你的问题,请参考以下文章

带有 JSON 读取的 EXTJS 4 表单填充

如何使用 ExtJS JSONReader 读取不可迭代的参数

在 ExtJS 中使用代理

如何使用 JSON 数据数组加载 extjs 3.4 存储

在extjs4中如何获取tree的json数据?

Extjs 4,如何使用单个 Json 文件为多个动态网格发送多个元数据