使用jQuery的$ .post()将数据传递到CakePHP控制器

时间:2011-11-26 21:45:47

标签: jquery ajax cakephp post cakephp-1.3

如果我从锚属性发送数据:

<a id="123">foo</a>

周围没有<form>

将jquery的$ .post()用于我的一个控制器:

    $('.add-fav').click(function() {
    var id = $(this).attr('id');
    $.post('/ajax/addFavorite', function(data){
    id : id
    }, 'json');
});

如何检索该控制器中的数据?我没有使用模型来验证任何东西,所以使用Cake的内置formhelper约定无关紧要。

     public function addFavorite() {
       $this->autoRender = false;

       $bar = $_POST['id'] // normally I'd do this to get '123' from the anchor id, but it doesn't work since it wasn't submitted within a form

        $dataBack = json_encode($bar);

       if($this->RequestHandler->isAjax()) {
            if($this->Session->read('Auth.User')) {
                return $dataBack;
            }
       }
 }

我可以将一个json_encoded关联数组作为数据发送回$ .post(),但我似乎无法发送最初发回的内容(例如,通过控制器发送回来的id)。我在这里遗漏了一些基本内容,或者如果没有在<form>内部的输入字段(隐藏可能)中发送数据,那是不可能的?

2 个答案:

答案 0 :(得分:2)

要传递的数据id作为$.post

的第二个参数发送
 $('.add-fav').click(function() {
    var id = $(this).attr('id');
    $.post('/ajax/addFavorite',{id:id}, function(data){
   console.log(data);
    }, 'json');
});

答案 1 :(得分:0)

使用CakePHP JS Helper也有很好的方法。

    $this->Js->get('.add-fav')->event('click',
        $this->Js->request(
        array(‘controller’ => ‘ajax’, ‘action' => 'addFavorite'),
           array(
               'data' => 'event.target.id',
               'async' => true,    
               'dataExpression' => true,
               'method' => 'POST',
               //'update' => '#element_id', // to paste the answer of the call
               //'before' => 'alert("Before request")',
               //'complete' => 'alert("Callback when request completed")',
               //'error' => 'alert("Callback for request error")',
               //'success' => 'alert("Success")', //code to execute if success
           )
        )
    );
    echo $this->Js->writeBuffer();