使用jquery ajax发布到CakePHP控制器

时间:2014-11-30 12:16:17

标签: php jquery ajax cakephp

我想将数据发布到CakePHP中的控制器,但是使用JQuery发布总是会导致" POST http // localhost / SA / myController / editUserData / 1 400(错误请求)"错误,我无法弄清楚原因。

在我看来,我有以下方法,将数据发布到控制器页面

   $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);
        }
    });

我的控制器方法如下所示:

  public function editUserData($id) {
       if($this->request->is('post') || $this->request->is('put')) {
           $this->AcsaUser->save($this->request->data('email'));//edit and save the new data
           echo 'ok';
       }
   }

任何想法??

1 个答案:

答案 0 :(得分:0)

可能抛出它的两件事。

(1)Cake的内置安全性 - 因此免除了该方法:

在AppController.php中

public function beforeFilter() {
    $this->Security->unlockedActions = array('editUserData')
}

(2)决定你希望你的editUserData方法如何渲染视图,如果你回显出'ok',它仍会拉入默认布局并在视图中寻找editUserData.ctp(和如果找不到文件会导致错误,所以

要在editUserData($ id)中不渲染任何内容,即.ctp视图文件和默认布局..,请添加

$this->autoRender = false;

仅渲染视图文件而不是布局:

$this->autoLayout = false;

......最后我只是在ajax调用中添加了这个参数:

dataType : 'html' // (or JSON?)