如何配置extjs阅读器来阅读这个json?

时间:2012-01-23 09:27:29

标签: json extjs extjs4 jsonp

我已配置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: ''
        }       
    }
});

此商店抛出错误

enter image description here

也许会发生这种情况,因为这个json中没有root?

任何想法如何正确阅读此输出和加载存储?

此致

2 个答案:

答案 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”视为一个字符串。