无法从extjs ajax接收post参数

时间:2014-03-26 10:46:14

标签: 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 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)它显示了一个空数组。这怎么可能?enter image description here

1 个答案:

答案 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中,您还可以告诉编写者使用encoderoot配置将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);