I\'ve configured extjs store to load data from useragentstring.com api, this api return data like this
{\"agent_type\":\"Browser\",\"agent_name\":\"Opera\",\
You need to restructure your json object that is returned to look more like:
{
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"
}
}
When you define the root of your JsonReader, you are telling the reader where in the object it should look. This is done so that you can return multiple objects inside your JSON for different stores on the same request.
As a side note you may want to watch how you handle Null values from your PHP... You may find that you will need to handle replacing "Null" from the backend as I believe ExtJS will treat "Null" as a string.
It works for me when I don't set root
or when I set it to undefined
.
You may also extend Ext.data.reader.Json
to adjust response to your needs. Example:
Ext.define('Ext.data.reader.JsonPWithoutRoot', {
extend: 'Ext.data.reader.Json',
read: function(response) {
return this.callParent([ { root: response } ]);
},
root: 'root'
});
And then in proxy define it like this:
proxy: {
type: 'jsonp',
callbackKey: 'method',
url: 'http://localhost/ext4/data3.php',
reader: Ext.create('Ext.data.reader.JsonPWithoutRoot', {})
}