我正在尝试将网格更新持久化到数据库,所以我在我的控制器中写道:
//...
editUser: function(button, eventObj) {
var view = Ext.widget('useredit');
view.down('form').loadRecord(this.getSelected());
},
getSelected: function() {
var grid = this.getUserList();
var selectedRecord = grid.getSelectionModel().getSelection()[0];
return selectedRecord;
},
updateUser: function(button) {
var win = button.up('window'),
form = win.down('form'),
record = form.getRecord(),
values = form.getValues();
record.set(values);
form.updateRecord();
win.close();
this.getUsersStore().sync();
}
});
这是我的商店代码:
Ext.define('MyApp.store.Users', {
extend: 'Ext.data.Store',
model: 'MyApp.model.User',
autoLoad: true,
proxy: {
type: 'ajax',
actionMethods:
{create: 'POST', read: 'GET', update: 'POST', destroy: 'POST'},
api: {
create: 'data/createUser.php',
read: 'data/getUsers.php',
update: 'data/updateUser.php',
destroy: 'data/deleteUser.php'
},
reader: {
type: 'json',
root: 'users',
successProperty: 'success'
}
}
});
当我点击“保存”按钮时,firebug告诉我POST请求已经发送到我的php文件,但是当我 php中的print_r($ _ POST)它显示了一个空数组。这怎么可能?
答案 0 :(得分:2)
默认情况下,代理writer会将JSON字符串作为原始POST数据发送到服务器。如果可能的话,PHP的$_POST
超全局从原始POST数据中获取变量/参数,例如如果它包含url编码的数据:
var1=a&var2=b&var3=c
但是,由于您的POST数据只是一个JSON字符串,因此没有要提取的key = value对,这就是您的$_POST
数组为空的原因。
要阅读原始发布数据,您可以使用PHP的输入流php://input
:
$json = file_get_contents('php://input');
$data = json_decode($json);
var_dump($data);
或者,在ExtJS中,您还可以告诉编写者使用encode
和root
配置将JSON字符串作为HTTP参数传递给请求:
proxy: {
// ...
writer: {
type: 'json',
encode: true,
root: 'users'
}
}
这会导致编写器生成如下的POST数据:
users={"var1":"a","var2":"b","var3":"c"}
因此允许您在PHP中使用$_POST
变量:
$data = json_decode($_POST['users']);
var_dump($data);