使用jquery ajax发布到CakePHP控制器
我想用CakePHP将数据发布到控制器,但是使用JQuery发布总是会导致“post http//localhost/SA/myController/editUserData/1400(错误请求)”错误,我不知道为什么 在我看来,我有以下方法,将数据发布到控制器页面使用jquery ajax发布到CakePHP控制器,php,jquery,ajax,cakephp,Php,Jquery,Ajax,Cakephp,我想用CakePHP将数据发布到控制器,但是使用JQuery发布总是会导致“post http//localhost/SA/myController/editUserData/1400(错误请求)”错误,我不知道为什么 在我看来,我有以下方法,将数据发布到控制器页面 $scope.saveUser = function() { $.ajax({ type: 'POST', url: '<?php echo Router::url(array(
$scope.saveUser = function() {
$.ajax({
type: 'POST',
url: '<?php echo Router::url(array(
'controller' => 'myController',
'action' => 'editUserData',
0 => $userInfo['user']['id'],));?>',
data: { email: 'cabraham@delhi.k12'},//"my edited data for example"
success: function (data) {
alert(data);
}
});
有什么想法吗?两件事可能会把它抛在脑后 (1) Cake的内置安全性-因此免除该方法的安全性: 在AppController.php中
public function beforeFilter() {
$this->Security->unlockedActions = array('editUserData')
}
(2) 决定editUserData方法呈现视图的方式,如果您回显“ok”,它仍会拉入默认布局并在视图中查找editUserData.ctp(如果找不到文件,则会导致错误),因此
不渲染任何内容,即.ctp视图文件和默认布局。。在editUserData($id)中,添加
要仅渲染视图文件而不渲染布局,请执行以下操作:
$this->autoLayout = false;
……最后,我在ajax调用中添加了这个参数:
dataType : 'html' // (or JSON?)
路由器的密钥“0”真奇怪。为什么不是“id”?并将dataType属性设置为ajax对象。@Alex没有那么奇怪,但没有必要,它可以在不显式指定键的情况下正常工作,使用像
id
这样的命名键,但是不起作用,因为这将指示命名元素,这将无法匹配可能的路由并生成类似于/id:1
的URL。Thank@david.philip的可能重复项,问题出在布局中,我按照第2点中的建议解决了它,但这一行$this->AcsaUser->save($this->request->data('email');还是不行,你知道吗?或者我该如何编辑我的数据?很高兴你来对了!因此,假设“AcsaUser”模型正在myController中加载,则使用:$this->AcsaUser->ID=$ID设置要更新的模型ID;然后将其另存为您现有的格式,同样在您的ajax中,您拥有它的方式没有错,但是将其作为=>url:''保存会更整洁一些;是的,谢谢:)问题在于设置id。此行解决了$This->AcsaUser->id=$id的问题;
$this->autoLayout = false;
dataType : 'html' // (or JSON?)