Javascript 如何从get请求创建多个JSON存储?
假设我在客户端使用extjs4构建了这个web应用程序,在服务器端使用Zend框架动作控制器。我在服务器端有一个数组,它们可以作为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 :
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,设置:[]}