Javascript ExtJS:从一个AJAX调用中存储多个json?
我有一个基于ExtJS的应用程序。编辑对象时,会出现一个带有多个选项卡的ExtJS窗口。其中三个选项卡具有Ext GridPanel,每个面板显示不同类型的数据。目前,每个GridPanel都有自己的JsonStore,这意味着对服务器总共有四个AJAX请求——一个用于javascript创建窗口,另一个用于每个JsonStore。三个JSONStore是否都可以读取一个AJAX调用?我可以轻松地组合所有JSON数据,每个数据当前都有一个不同的Javascript ExtJS:从一个AJAX调用中存储多个json?,javascript,ajax,optimization,datagrid,extjs,Javascript,Ajax,Optimization,Datagrid,Extjs,我有一个基于ExtJS的应用程序。编辑对象时,会出现一个带有多个选项卡的ExtJS窗口。其中三个选项卡具有Ext GridPanel,每个面板显示不同类型的数据。目前,每个GridPanel都有自己的JsonStore,这意味着对服务器总共有四个AJAX请求——一个用于javascript创建窗口,另一个用于每个JsonStore。三个JSONStore是否都可以读取一个AJAX调用?我可以轻松地组合所有JSON数据,每个数据当前都有一个不同的root属性 编辑:这是Ext 2.2,而不是Ext
root
属性
编辑:这是Ext 2.2,而不是Ext 3。您可以使用Ext.Direct来执行此操作,在一个连接过程中可以发出多个请求。您可以使用AjaxRequest直接获取JSON,然后将其传递给每个JSONStore的loadData()方法。也许HTTP缓存可以帮助您。结合您的json数据,确保您的JsonStores正在使用GET,并观察Firebug以确保第二个和第三个请求不会发送到服务器。您可能需要在该json响应中设置一个far future expires头,如果您希望数据经常更改,那么这可能是不好的。当触发存储的
加载事件时,从json响应创建的javascript对象在yourStore.reader.jsonData
中可用。例如:
yourStore.on('load', function(firstStore) {
var data = firstStore.reader.jsonData;
otherStore.loadData(data);
thirdStore.loadData(data);
}
编辑:
为了澄清这一点,每个存储都需要一个单独的root
属性(您已经在这样做了),以便每个存储都能获得预期的数据
{
"firstRoot": [...],
"secondRoot": [...],
"thirdRoot": [...]
}
另一种奇妙的方法是使用Ext.Data.Connection(),如下所示:
var conn = new Ext.data.Connection();
conn.request({
url: '/myserver/allInOneAjaxCall',
method: 'POST',
params: {
// if you wish too
},
success: function(responseObj) {
var json = Ext.decode(responseObj.responseText);
yourStore1.loadData(json.dataForStore1);
yourStore2.loadData(json.dataForStore2);
},
failure: function(responseObj) {
var message = Ext.decode(responseObj.responseText).message;
alert(message);
}
});
这对我有用