Javascript webserivce中的Json存储在ExtJS 4.0中工作,但在4.2中不工作
我有以下简单的HTML。它在使用ExtJS4时工作,但在使用ExtJS4.2时不工作 在这两种情况下,都会调用webservice,但在使用ExtJS 4.2时,Javascript webserivce中的Json存储在ExtJS 4.0中工作,但在4.2中不工作,javascript,json,web-services,extjs,extjs4,Javascript,Json,Web Services,Extjs,Extjs4,我有以下简单的HTML。它在使用ExtJS4时工作,但在使用ExtJS4.2时不工作 在这两种情况下,都会调用webservice,但在使用ExtJS 4.2时,store.data为空 我猜这就是问题所在(ExtJS 4.2不支持这里的某些内容,但我不确定是什么): 这是完整的代码: <body> <div id="ext-grid"> </div> <script type="text/javascript"> Ext.require(
store.data
为空
我猜这就是问题所在(ExtJS 4.2不支持这里的某些内容,但我不确定是什么):
这是完整的代码:
<body>
<div id="ext-grid">
</div>
<script type="text/javascript">
Ext.require([
'Ext.grid.*',
'Ext.data.*',
'Ext.panel.*',
'Ext.layout.container.Border'
]);
Ext.define('Ext.AspWebAjaxProxy', {
extend: 'Ext.data.proxy.Ajax',
require: 'Ext.data',
buildRequest: function (operation) {
var params = Ext.applyIf(operation.params || {}, this.extraParams || {}),
request;
params = Ext.applyIf(params, this.getParams(params, operation));
if (operation.id && !params.id) {
params.id = operation.id;
}
params = Ext.JSON.encode(params);
request = Ext.create('Ext.data.Request', {
params: params,
action: operation.action,
records: operation.records,
operation: operation,
url: operation.url
});
request.url = this.buildUrl(request);
operation.request = request;
return request;
}
});
Ext.onReady(function () {
Ext.define('Actors', {
extend: 'Ext.data.Model',
fields: ['FirstName', 'LastName', 'EmailAddress', 'Salary']
});
store = new Ext.data.Store(
{
proxy: new Ext.AspWebAjaxProxy({
url: 'service.asmx/LoadRecords',
actionMethods: {
read: 'POST'
},
reader: {
type: 'json',
model: 'Actors',
root: 'd'
},
headers: {
'Content-Type': 'application/json; charset=utf-8'
}
})
});
var grid = Ext.create('Ext.grid.Panel', {
store: store,
columns: [
{ text: 'FirstName', dataIndex: 'FirstName', width: 280, sortable: true },
{ text: 'LastName', dataIndex: 'LastName', sortable: true },
{ text: 'EmailAddress', dataIndex: 'EmailAddress', width: 150, sortable: true },
{ text: 'Salary', dataIndex: 'Salary', sortable: true }
],
renderTo: 'ext-grid'
});
store.load();
});
</script>
</body>
我认为问题在于您重新定义了buildRequest方法。在4.0版和4.2版之间,此函数的内部结构可能发生了变化
ExtJs 4.2提供了非常广泛的可能性来配置发送请求的方式,因此不需要重新定义该函数 你得到的JSON是相当标准的,它应该可以工作。请求必须是什么样子?如果你能详细说明这一点,我可能会帮助你更好。我解决了这个问题,我删除了ActionMethod,并以GET的形式处理了webservice调用。你是对的,我使用了常规的Ext.Data.HttpProxy,它现在可以工作了。
<body>
<div id="ext-grid">
</div>
<script type="text/javascript">
Ext.require([
'Ext.grid.*',
'Ext.data.*',
'Ext.panel.*',
'Ext.layout.container.Border'
]);
Ext.define('Ext.AspWebAjaxProxy', {
extend: 'Ext.data.proxy.Ajax',
require: 'Ext.data',
buildRequest: function (operation) {
var params = Ext.applyIf(operation.params || {}, this.extraParams || {}),
request;
params = Ext.applyIf(params, this.getParams(params, operation));
if (operation.id && !params.id) {
params.id = operation.id;
}
params = Ext.JSON.encode(params);
request = Ext.create('Ext.data.Request', {
params: params,
action: operation.action,
records: operation.records,
operation: operation,
url: operation.url
});
request.url = this.buildUrl(request);
operation.request = request;
return request;
}
});
Ext.onReady(function () {
Ext.define('Actors', {
extend: 'Ext.data.Model',
fields: ['FirstName', 'LastName', 'EmailAddress', 'Salary']
});
store = new Ext.data.Store(
{
proxy: new Ext.AspWebAjaxProxy({
url: 'service.asmx/LoadRecords',
actionMethods: {
read: 'POST'
},
reader: {
type: 'json',
model: 'Actors',
root: 'd'
},
headers: {
'Content-Type': 'application/json; charset=utf-8'
}
})
});
var grid = Ext.create('Ext.grid.Panel', {
store: store,
columns: [
{ text: 'FirstName', dataIndex: 'FirstName', width: 280, sortable: true },
{ text: 'LastName', dataIndex: 'LastName', sortable: true },
{ text: 'EmailAddress', dataIndex: 'EmailAddress', width: 150, sortable: true },
{ text: 'Salary', dataIndex: 'Salary', sortable: true }
],
renderTo: 'ext-grid'
});
store.load();
});
</script>
</body>
{
"d": [
{
"__type": "CrystalBall.service+Record",
"FirstName": "Palash",
"LastName": "Debnath",
"EmailAddress": "palash@yahoo.com",
"Salary": 100
},
{
"__type": "CrystalBall.service+Record",
"FirstName": "Pritam",
"LastName": "Debnath",
"EmailAddress": "pritam@yahoo.com",
"Salary": 200
}
]
}