我是CakePHP的新手,我正在試圖找出如何在CakePHP視圖中對控制器中的函數進行異步調用。我想控制器函數返回一個字符串,並讓視圖顯示這個字符串。我也想在不使用幫手的情況下做到這一點。我一直在試圖找到網絡上的例子,但一直無法這樣做。有沒有人有一個簡單的例子?我也在使用jQuery。從jQuery調用CakePHP函數的示例
謝謝
我是CakePHP的新手,我正在試圖找出如何在CakePHP視圖中對控制器中的函數進行異步調用。我想控制器函數返回一個字符串,並讓視圖顯示這個字符串。我也想在不使用幫手的情況下做到這一點。我一直在試圖找到網絡上的例子,但一直無法這樣做。有沒有人有一個簡單的例子?我也在使用jQuery。從jQuery調用CakePHP函數的示例
謝謝
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的功能:( '更新'=> '#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的助手,你可以使用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那麼「成功」會將元素id爲「elementToUpdate」的元素更改爲字符串「在視圖中顯示」,因爲它是從控制器操作返回的。
感謝Brett的幫助,但正如我在帖子中所說的,我希望得到一個不使用幫手的例子。這可能嗎? – jason
是的,有可能,我只用jQuery示例更新了我的答案。如果你仍然需要幫助,請回復你正在努力完成的任務,我會爲你的情況寫更多的jQuery。 –
對我來說,這隻會在使用jQuery時產生內部服務器錯誤。 @BrettStewart你知道爲什麼會發生這種情況,是因爲路由嗎? 另外我怎樣才能獲取控制器中發佈的數據? –
[這可能會讓你開始](http://book.cakephp.org/2.0/en/views/json-and-xml-views.html)。 – Blazemonger