как настроить extjs reader для чтения этого json? - PullRequest
2 голосов
/ 23 января 2012

Я настроил хранилище extjs для загрузки данных из API-интерфейса useragentstring.com, этот 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 нет корня?

есть идеи, как правильно прочитать этот вывод и загрузить хранилище?

С уважением

Ответы [ 2 ]

5 голосов
/ 23 января 2012

Это работает для меня, когда я не установил 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', {})
}
0 голосов
/ 24 января 2012

Вам нужно реструктурировать свой возвращаемый объект 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» из бэкэнда, так как я считаю, что ExtJS будет рассматривать «Null» как строку.

...