2014-03-26 47 views
0

我試圖堅持電網更新到數據庫中,所以我在我的控制器寫:無法接收來自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' 
    } 
} 

});

當我點擊「保存」按鈕螢火蟲告訴我,POST請求已發送到我的PHP文件,但是當我在PHP中打印_r($ _ POST) 它顯示我一個空數組。怎麼會這樣? enter image description here

回答

2

默認情況下,代理的writer會將JSON字符串作爲原始POST數據發送到服務器。如果可能的話,PHP的$_POST superglobal從原始POST數據中獲取變量/參數。如果它包含的URL編碼的數據:

var1=a&var2=b&var3=c 

然而,由於你的POST數據僅僅是一個JSON字符串,沒有鍵值對從,提取這就是爲什麼你$_POST數組爲空。

要閱讀原始post數據,你可以使用PHP的輸入流php://input

$json = file_get_contents('php://input'); 
$data = json_decode($json); 
var_dump($data); 

另外,在ExtJS的,你也可以告訴筆者使用的傳遞JSON字符串作爲HTTP參數來請求encoderoot配置:

proxy: { 
    // ... 
    writer: { 
     type: 'json', 
     encode: true, 
     root: 'users' 
    } 
} 

,這將導致在作家產生這樣的POST數據:

users={"var1":"a","var2":"b","var3":"c"} 

,因此允許您使用$_POST變量在PHP中:

$data = json_decode($_POST['users']); 
var_dump($data);