首页 文章

从jQuery调用CakePHP函数的示例

提问于
浏览
0

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

谢谢

1 回答

  • 3

    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”的元素更改为字符串“在视图中显示”时,将执行上面的示例,因为它是从控制器动作 .

相关问题