来自webserivce的Json存储适用于ExtJS 4.0,但不适用于4.2
Json store from webserivce works in ExtJS 4.0 but not 4.2
我有以下简单的HTML。它在使用 ExtJS 4 时有效,但在使用 ExtJS 4.2 时不起作用。
在这两种情况下,都会调用 Web 服务,但在使用 ExtJS 4.2 时,store.data
为空。
我猜这就是问题所在(ExtJS 4.2 不支持这里的东西,但我不确定是什么):
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;
}
});
这是完整的代码:
<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>
这是 JSON:
{
"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
}
]
}
我认为问题是你重新定义了方法buildRequest。此函数的内部结构可能在 4.0 版和 4.2 版之间发生了变化。
ExtJs 4.2 提供了非常广泛的可能性来配置发送请求的方式,因此不需要重新定义该功能。
相关文章:
- HTML5 Canvas toDataURL(“image/png”)适用于一些绘画,而有些则不然,不确定原因
- JavaScript不显示剩余字符,但适用于其他页面
- 我如何完善这个Javascript代码,使其只适用于来自图像的链接(而不是来自文本的链接)
- 为什么这只适用于身体部分而不是头部
- 为什么不't此正则表达式适用于重复出现的对
- document.getElementById 对内部 html 的调用适用于 $_POST 和 $_GET 变量,但不
- JavaScript 位置适用于本地主机而不是服务器
- Rally App SDK 2.0:Rallymultiobjectpicker,适用于不显示displayField的
- jQuery事件在Mozilla上不起作用,并且适用于其他浏览器
- Angular.js - 控制器不为索引执行,适用于其余模板
- D3 .on 更改适用于文本而不是图表
- Zillow 数据 - json_encode不起作用 - 适用于常规变量
- 弹出模式仅适用于表格中的第一个元素,第二次单击后不会再次打开
- Phonegap Android项目适用于模拟器,而不是实际的手机
- ajax jonp 不应该适用于 请求的上不存在“访问控制-允许源”标头
- AngularJS:ng-单击不起作用,适用于<按钮>
- Javascript不会在移动设备上加载.适用于桌面
- 为什么我的代码适用于高度:100px,而不是高度:100%
- 拖放区.js + Laravel-多文件上传不起作用(仅适用于一个文件)
- 哪些限制适用于不透明响应