Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ExtJS:从一个AJAX调用中存储多个json?_Javascript_Ajax_Optimization_Datagrid_Extjs - Fatal编程技术网

Javascript ExtJS:从一个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

我有一个基于ExtJS的应用程序。编辑对象时,会出现一个带有多个选项卡的ExtJS窗口。其中三个选项卡具有Ext GridPanel,每个面板显示不同类型的数据。目前,每个GridPanel都有自己的JsonStore,这意味着对服务器总共有四个AJAX请求——一个用于javascript创建窗口,另一个用于每个JsonStore。三个JSONStore是否都可以读取一个AJAX调用?我可以轻松地组合所有JSON数据,每个数据当前都有一个不同的
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);

        }
    });
这对我有用