我是CakePHP的新手,我想知道如何从CakePHP视图到控制器中的函数进行异步调用 . 我希望控制器函数返回一个字符串并让视图显示该字符串 . 我也想在不使用助手的情况下这样做 . 我一直试图在网上找到例子,但一直无法这样做 . 有没有人有一个简单的例子?我也在使用jQuery .
谢谢
CakePHP有一个内置的JS Helper来帮助编写aJax函数 . 唯一的问题是在你的头脑中包含jquery或者蛋糕会抛出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'; }
EDIT** 如果您想使用jQuery来执行此操作而不是CakePHP Helper,您可以使用aJax来调用操作,然后更新您的元素,如下所示
$('#element').on('click', function() { $.ajax({ url : '/controller/action', type: 'POST', success : function(response){ $('#elementToUpdate').html(response); } });
}};
在Controller Action中,您可以返回要在视图中显示的“字符串”
function action(){ $string = 'Show this in the view'; return $string; }
当你“点击”id为“element”的元素然后“Success”将id为“elementToUpdate”的元素更改为字符串“在视图中显示”时,将执行上面的示例,因为它是从控制器动作 .
1 回答
CakePHP有一个内置的JS Helper来帮助编写aJax函数 . 唯一的问题是在你的头脑中包含jquery或者蛋糕会抛出jQuery错误 . 更多信息http://book.cakephp.org/2.0/en/core-libraries/helpers/js.html
你的表格:
Ajax函数:('update'=>'#na')是您要在视图中更新的元素的ID .
用户控制器中的功能
EDIT** 如果您想使用jQuery来执行此操作而不是CakePHP Helper,您可以使用aJax来调用操作,然后更新您的元素,如下所示
}};
在Controller Action中,您可以返回要在视图中显示的“字符串”
当你“点击”id为“element”的元素然后“Success”将id为“elementToUpdate”的元素更改为字符串“在视图中显示”时,将执行上面的示例,因为它是从控制器动作 .