我正在尝试使用EXT JSON存储来使用JSON发送数据,但它似乎不起作用。 这是一个简单的代码:
var myStore = new Ext.data.Store({
//model: 'User',
proxy: {
type: 'ajax',
url: '/users.svc',
reader: {
type: 'json',
root: 'users'
},
writer: {
type: 'json',
root: 'data'
},
actionMethods: {
create: 'POST', read: 'POST', update: 'POST', destroy: 'POST'
},
extraParams: { test: 'test' }
},
listeners: {
beforeload: function (store, operation, options) {
//alert(operation.params);
}
},
autoLoad: true
});
由于我定义了JSON“writer”,我期望参数可以使用JSON发送到服务器。
但是它仍然使用以下正文进行常规POST:
test=test&page=1&start=0&limit=25
虽然我的期望是POST应该具有以下正文:{test:'test',page:1,start:0}
我将不胜感激任何帮助
P.S。我正在使用EXTJS 4.0.7
答案 0 :(得分:2)
proxy.read总是使用params,而不是jsonData,所以store.load不能发布json
http://ahlearns.wordpress.com/2012/08/16/ext-js-4-load-a-data-store-using-json-params/
Ext.define('Ext.ux.data.proxy.JsonAjaxProxy', {
extend:'Ext.data.proxy.Ajax',
alias:'proxy.jsonajax',
actionMethods : {
create: "POST",
read: "POST",
update: "POST",
destroy: "POST"
},
buildRequest:function (operation) {
var request = this.callParent(arguments);
// For documentation on jsonData see Ext.Ajax.request
request.jsonData = request.params;
request.params = {};
return request;
},
/*
* @override
* Inherit docs. We don't apply any encoding here because
* all of the direct requests go out as jsonData
*/
applyEncoding: function(value){
return value;
}
});
希望这有帮助!
答案 1 :(得分:0)
将proxy
定义移至model
。
E.g。
Ext.define('User', {
extend: 'Ext.data.Model',
fields: ['id', 'name', 'email'],
proxy: {
type: 'ajax',
url: '/users.svc',
reader: {
type: 'json',
root: 'users'
},
writer: {
type: 'json',
root: 'data'
},
actionMethods: {
create: 'POST', read: 'POST', update: 'POST', destroy: 'POST'
},
extraParams: { test: 'test' }
}
});
然后像这样配置商店:
var myStore = new Ext.data.Store({
model: 'User'
});
商店将使用模型中指定的代理。 希望这有帮助!