Javascript Can';t从extjs ajax接收post参数
我试图将网格更新持久化到数据库,因此我在控制器中写入:Javascript Can';t从extjs ajax接收post参数,javascript,php,ajax,extjs,Javascript,Php,Ajax,Extjs,我试图将网格更新持久化到数据库,因此我在控制器中写入: //... editUser: function(button, eventObj) { var view = Ext.widget('useredit'); view.down('form').loadRecord(this.getSelected()); }, getSelected: function() { var grid = this.getUserList(); var
//...
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($\u POST)它显示了一个空数组。这是怎么回事?默认情况下,代理将JSON字符串作为原始POST数据发送到服务器。PHP的$\u POST
超全局从原始POST数据中获取变量/参数(如果可能),例如,如果它包含url编码的数据:
var1=a&var2=b&var3=c
但是,由于POST数据只是一个JSON字符串,因此没有可提取的键=值对,这就是为什么$\u POST
数组为空的原因
要读取原始post数据,可以使用PHP的输入流:
或者,在ExtJS中,您还可以告诉编写器使用和配置将JSON字符串作为HTTP参数传递给请求:
proxy: {
// ...
writer: {
type: 'json',
encode: true,
root: 'users'
}
}
这将导致编写器生成如下POST数据:
users={"var1":"a","var2":"b","var3":"c"}
因此,允许您在PHP中使用$\u POST
变量:
$data = json_decode($_POST['users']);
var_dump($data);
$data = json_decode($_POST['users']);
var_dump($data);