我是 CakePHP 的新手,我想告诉你如何从 CakePHP 视图对控制器中的函数进行异步调用。我希望控制器函数返回一个字符串并让视图显示这个字符串。我也想在不使用助手的情况下做到这一点。我一直在尝试在网上查找示例,但一直无法做到。有没有人有一个简单的例子?我也在使用 jQuery。
谢谢
我是 CakePHP 的新手,我想告诉你如何从 CakePHP 视图对控制器中的函数进行异步调用。我希望控制器函数返回一个字符串并让视图显示这个字符串。我也想在不使用助手的情况下做到这一点。我一直在尝试在网上查找示例,但一直无法做到。有没有人有一个简单的例子?我也在使用 jQuery。
谢谢
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”的元素更改为字符串“在视图中显示”,因为它是从控制器动作。