Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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 如何从get请求创建多个JSON存储?_Javascript_Json_Extjs_Extjs4 - Fatal编程技术网

Javascript 如何从get请求创建多个JSON存储?

Javascript 如何从get请求创建多个JSON存储?,javascript,json,extjs,extjs4,Javascript,Json,Extjs,Extjs4,假设我在客户端使用extjs4构建了这个web应用程序,在服务器端使用Zend框架动作控制器。我在服务器端有一个数组,它们可以作为JSON输出到客户端。当我只想创建一个存储时,通常的方法是这样: Ext.define('MA.store.AdminResources', { extend : 'Ext.data.Store', fields : [ { name : 'id' }, { name : 'name' } ], autoLoad : true, proxy :

假设我在客户端使用extjs4构建了这个web应用程序,在服务器端使用Zend框架动作控制器。我在服务器端有一个数组,它们可以作为JSON输出到客户端。当我只想创建一个存储时,通常的方法是这样:

    Ext.define('MA.store.AdminResources', {
extend : 'Ext.data.Store',
fields : [ {
    name : 'id'
}, {
    name : 'name'
} ],
autoLoad : true,
proxy : {
    type : 'ajax',
    url : './account/adminresources',
    reader : {
        type : 'json'
        //,root : 'users'
    }
}

});
adminSettings = Ext.create('Ext.data.Store', {model: AdminSettings});
countries = Ext.create('Ext.data.Store', {model: Country});

Ext.ajax.request({
    url: './account/adminresources',
    success: function(response) {
        var json = Ext.decode(response.responseText);
        adminsettings.loadData(json.adminsettings);
        countries.loadData(json.countries);
        //...
    } 
});
如果我想从对服务器的一个http请求创建多个JSON存储呢? 此服务器不会为每个存储接收远程代理请求,并且将为所有存储执行一个请求。 以下是服务器返回的我的JSON示例:

{
"adminsettings"{"userid":3333,"primaryemail":"1@1.com","firstname":"","middlename":null}
,"countries":{"AD":"Andorra","AE":"UnitedArabEmirates","AF":"Afghanistan"...}
,"languages":{"aa":"Afar","ab":"Abkhazian","ace":"Achinese","ach":"Acoli"...
}}
如何只需向服务器发出一个http请求就可以创建adminsettings、countries和Language的JSON存储?
也许我需要定义一个代理和三个读卡器

正如您在文档中看到的,您可以定义无代理存储:

Ext.create('Ext.data.Store', {
    model: 'User',
    data : [
        {firstName: 'Ed',    lastName: 'Spencer'},
        {firstName: 'Tommy', lastName: 'Maintz'},
        {firstName: 'Aaron', lastName: 'Conran'},
        {firstName: 'Jamie', lastName: 'Avins'}
    ]
});
然后很容易发出ajax请求并成功手动加载数据:

大概是这样的:

    Ext.define('MA.store.AdminResources', {
extend : 'Ext.data.Store',
fields : [ {
    name : 'id'
}, {
    name : 'name'
} ],
autoLoad : true,
proxy : {
    type : 'ajax',
    url : './account/adminresources',
    reader : {
        type : 'json'
        //,root : 'users'
    }
}

});
adminSettings = Ext.create('Ext.data.Store', {model: AdminSettings});
countries = Ext.create('Ext.data.Store', {model: Country});

Ext.ajax.request({
    url: './account/adminresources',
    success: function(response) {
        var json = Ext.decode(response.responseText);
        adminsettings.loadData(json.adminsettings);
        countries.loadData(json.countries);
        //...
    } 
});

正如您在文档中所看到的,您可以在不使用代理的情况下定义存储:

Ext.create('Ext.data.Store', {
    model: 'User',
    data : [
        {firstName: 'Ed',    lastName: 'Spencer'},
        {firstName: 'Tommy', lastName: 'Maintz'},
        {firstName: 'Aaron', lastName: 'Conran'},
        {firstName: 'Jamie', lastName: 'Avins'}
    ]
});
然后很容易发出ajax请求并成功手动加载数据:

大概是这样的:

    Ext.define('MA.store.AdminResources', {
extend : 'Ext.data.Store',
fields : [ {
    name : 'id'
}, {
    name : 'name'
} ],
autoLoad : true,
proxy : {
    type : 'ajax',
    url : './account/adminresources',
    reader : {
        type : 'json'
        //,root : 'users'
    }
}

});
adminSettings = Ext.create('Ext.data.Store', {model: AdminSettings});
countries = Ext.create('Ext.data.Store', {model: Country});

Ext.ajax.request({
    url: './account/adminresources',
    success: function(response) {
        var json = Ext.decode(response.responseText);
        adminsettings.loadData(json.adminsettings);
        countries.loadData(json.countries);
        //...
    } 
});
在阅读的过程中,我找到了问题的确切答案。以下是问题和答案:

用一个AJAX请求加载多个存储

还有一个使用XML的示例

从作为单个http请求的一部分返回的单个json字符串向多个数据存储显示数据

备选案文1:

备选案文2:

在阅读的过程中,我找到了问题的确切答案。以下是问题和答案:

用一个AJAX请求加载多个存储

还有一个使用XML的示例

从作为单个http请求的一部分返回的单个json字符串向多个数据存储显示数据

备选案文1:

备选案文2:



你是在问如何格式化JSON来表示多个存储吗?@jfriend00实际上我在问如何在客户端处理该JSON以从该JSON创建多个存储。在你的JSON响应中,哪些数据段构成了一个存储?我们不知道这个词是什么意思。我看到一组管理设置,然后是国家列表和语言列表。这些数据中哪些是存储?他指的是Ext.data.store意义上的存储。他希望使用一个get请求,并填充2个或多个Ext.data.Store。我也想知道这个问题的答案您需要定义字段;这就是它的工作方式。实际上,您可以发送比放入存储中的数据更多的数据,并且可能有这样的用例。此外,通常应在模型中定义字段,然后将你的存储指向上述模型,特别是如果你要实现SMVC范式。你是在问如何格式化JSON以表示多个存储吗?@jfriend00实际上我在问如何在客户端处理JSON以从该JSON创建多个存储。在你的JSON响应中,哪些数据段构成了一个存储?我们不知道这个词是什么意思。我看到一组管理设置,然后是国家列表和语言列表。这些数据中哪些是存储?他指的是Ext.data.store意义上的存储。他希望使用一个get请求,并填充2个或多个Ext.data.Store。我也想知道这个问题的答案您需要定义字段;这就是它的工作方式。实际上,您可以发送比放入存储中的数据更多的数据,并且可能有这样的用例。此外,您通常应该在模型中定义字段,然后将您的商店指向所述模型,特别是如果您要实现SMVC范型。感谢您非常有用的回答。您知道在MVC应用程序中可以将代码放在哪里吗?在模型文件中、商店中或其他地方?只需扩展Ext.app.Controller即可。如果只需要显示数据,请将其放入init方法中。在另一种情况下,您可以在控制器中定义一个函数,并在需要刷新数据时调用该函数。在您的示例中,如果在具有分页的网格中使用adminSettings存储,如何设置分页工具栏将使用的adminSettings存储区的总数?应使用存储区的total属性映射定义reader,并且json.adminSettings应包含total数据。e、 g.store:adminSettings=Ext.create'Ext.data.store',{model:adminSettings,proxy:{type:'memory',reader:{type:'json',root:'settings',totalProperty:'cnt'}};json:{cnt:100,success:true,settings:[]}谢谢你非常有用的回答。你知道我可以把你的代码放在MVC应用程序的哪里吗?放在模型文件、商店或其他地方?只需扩展Ext.app.Controller。如果只需要显示数据,请将其放入init方法中。在另一种情况下,您可以在控制器中定义一个函数,并在需要刷新数据时调用它。在您的示例中,如果在带有分页的网格中使用adminSettings存储,您如何设置
分页工具栏将使用的adminSettings存储区的总数?您应该使用存储区的total属性映射定义reader,并且json.adminSettings应该包含全部数据。e、 g.store:adminSettings=Ext.create'Ext.data.store',{model:adminSettings,proxy:{type:'memory',reader:{type:'json',root:'settings',totalProperty:'cnt'}};json:{cnt:100,成功:true,设置:[]}