Пример вызова функции CakePHP из jQuery

0

Я новичок в CakePHP, и я пытаюсь понять, как сделать асинхронный вызов из представления CakePHP функции в контроллере. Я хотел бы, чтобы функция контроллера возвращала строку и отображала эту строку. Я также хотел бы сделать это, не используя помощников. Я пытаюсь найти примеры в Интернете, но не смог этого сделать. У кого-нибудь есть простой пример? Я также использую jQuery.

благодаря

Теги:
cakephp-2.3

1 ответ

3

CakePHP имеет встроенный помощник JS, который помогает писать функции aJax. Единственный улов состоит в том, чтобы включить jquery в вашу голову, или торт будет бросать ошибки jQuery. Heres Дополнительная информация http://book.cakephp.org/2.0/ru/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') - это идентификатор элемента, который вы хотите обновить в своем представлении.

<?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 вы можете вернуть строку, которую вы хотите показать в представлении

function action(){
  $string = 'Show this in the view';

   return $string;
}

Вышеприведенный пример будет выполнен, когда вы "щелкните" элемент с идентификатором "element", а затем "Success" измените элемент с идентификатором "elementToUpdate" на String "Показать это в представлении". Поскольку он был возвращен из действия контроллера.

  • 0
    Спасибо за помощь, Бретт, но, как я уже говорил в посте, я надеялся получить пример без помощи помощников. Это возможно?
  • 0
    Да, возможно, я также обновил свой ответ только на примере jQuery. Если вам все еще нужна помощь, прокомментируйте то, что вы пытаетесь достичь, и я напишу jQuery больше для вашей ситуации.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню