0

我是 CakePHP 的新手,我想告诉你如何从 CakePHP 视图对控制器中的函数进行异步调用。我希望控制器函数返回一个字符串并让视图显示这个字符串。我也想在不使用助手的情况下做到这一点。我一直在尝试在网上查找示例,但一直无法做到。有没有人有一个简单的例子?我也在使用 jQuery。

谢谢

4

1 回答 1

3

CakePHP 有一个内置的 JS Helper 来帮助编写 aJax 函数。唯一的问题是在你的头脑中包含 jquery,否则 cake 会抛出 jQuery 错误。继承人更多信息http://book.cakephp.org/2.0/en/core-libraries/helpers/js.html

您的表格:

<?php 
  echo $this->Form->create('User', array('default'=>false, 'id'=>'YourForm'));
  echo $this->Form->input('username');
  echo $this->Form->submit('Check Username');
  echo $this->Form->end();
?>

Ajax 函数: ('update'=>'#na') 是您要在视图中更新的元素的 id。

<?php
  $data = $this->Js->get('#YourForm')->serializeForm(array('isForm' => true, 'inline' => true));
  $this->Js->get('#YourForm')->event(
    'submit',
    $this->Js->request(
      array('action' => 'checkUsername', 'controller' => 'user'),
      array(
        'update' => '#na',
        'data' => $data,
        'async' => true,    
        'dataExpression'=>true,
        'method' => 'POST'
      )
    )
  );
  echo $this->Js->writeBuffer();                                                 
?>

用户控制器中的功能

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

  $username = $this->User->find('first', array('conditions'=>array('User.username'=>$this->request->data['User']['username'])));

  if ( $username == true ) 
    echo 'Username is taken';
  else
    echo 'Username is not taken';  
}

编辑* * *如果你想使用 jQuery 而不是 CakePHP Helper 你可以使用 aJax 来调用一个动作,然后像下面这样更新你的元素*

$('#element').on('click', function() {
  $.ajax({
      url : '/controller/action',
      type: 'POST',
      success : function(response){
        $('#elementToUpdate').html(response);
      }
  });

} });

在您的控制器操作中,您可以返回要在视图中显示的“字符串”

function action(){
  $string = 'Show this in the view';

   return $string;
}

上面的示例将在您“单击”一个 id 为“element”的元素时执行,然后在“成功”时将 id 为“elementToUpdate”的元素更改为字符串“在视图中显示”,因为它是从控制器动作。

于 2013-10-21T15:26:12.000 回答