2013-10-21 42 views
0

我是CakePHP的新手,我正在試圖找出如何在CakePHP視圖中對控制器中的函數進行異步調用。我想控制器函數返回一個字符串,並讓視圖顯示這個字符串。我也想在不使用幫手的情況下做到這一點。我一直在試圖找到網絡上的例子,但一直無法這樣做。有沒有人有一個簡單的例子?我也在使用jQuery。從jQuery調用CakePHP函數的示例

謝謝

+0

[這可能會讓你開始](http://book.cakephp.org/2.0/en/views/json-and-xml-views.html)。 – Blazemonger

回答

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的功能:( '更新'=> '#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」的元素更改爲字符串「在視圖中顯示」,因爲它是從控制器操作返回的。

+0

感謝Brett的幫助,但正如我在帖子中所說的,我希望得到一個不使用幫手的例子。這可能嗎? – jason

+0

是的,有可能,我只用jQuery示例更新了我的答案。如果你仍然需要幫助,請回復你正在努力完成的任務,我會爲你的情況寫更多的jQuery。 –

+0

對我來說,這隻會在使用jQuery時產生內部服務器錯誤。 @BrettStewart你知道爲什麼會發生這種情況,是因爲路由嗎? 另外我怎樣才能獲取控制器中發佈的數據? –