Efetuando requisição Ajax com CakePHP – RiaBox
Como realizar uma requisição Ajax utilizando todos os recursos do framework CakePHP.
Bom, aqui vai um breve passo-a-passo de como fazer este procedimento.
Como iremos trabalhar com o jQuery, que é uma das bibliotecas JavaScript mais utilizadas, será necessário fazer download e colocá-la no diretório app/webroot/js. Para facilitar, altere o nome do arquivo para jquery.js apenas. Feito isto, em nosso Controller devemos incluir o JsHelper, que irá nos auxiliar nesta implementação, sem ser necessário escrever código puro em JavaScript.
Criaremos agora dois métodos neste mesmo Controller: index para apresentar a nossa View e request para receber a requisição Ajax.
// nenhum layout e nenhuma view
// parâmetros da requisição
Em nossa View, localizada em app/View/Users/index.ctp (onde Users é nosso exemplo de Controller) teremos apenas um botão, que ao clicar será enviado uma requisição contendo dois parâmetros: foo e bar.
echo $this->Js->submit('Enviar', array('update' => '#response', 'url' => array('action' => 'request', 'foo', 'bar')));
Utilizando o JsHelper, será criado um botão capaz de submeter um formulário utilizando a API XmlHttpRequest. A opção update indica o elemento que receberá a resposta do servidor. E a opção url, a ação requisitada junto com nossos dois parâmetros;
Inclusão da biblioteca jQuery;
Por padrão, os scripts são guardados em cache e você deve exibir o conteúdo do cache explicitamente;
E por fim, o elemento que indicamos na opção update, que irá receber a resposta da nossa requisição.
Seguindo todos estes passos, a resposta que iremos receber no elemento indicado, será este:
(int) 0 => 'foo',
(int) 1 => 'bar'
'isAjax' => true,
Com isto, utilizamos todos os recurso do CakePHP para realizar requisições em Ajax, não sendo necessário escrever ainda mais linhas de código em um arquivo .js como aprendemos logo no início dos estudos ou mesmo quando é usado somente jQuery.
Categoria: JavaScript, PHP, Web
Tags: ajax, cakephp, desenvolvimento, javascript
david balbino Abril 06th, 2015	 Responder
Cara, incrível funcionou direitinho aqui. Já está salvo nos meus favoritos o seu site.
Devidy Oliviera Abril 06th, 2015	 Responder
Eu tenho uma dúvida, tentei fazer aqui mais não funcionou, no meu caso eu preciso do ajax em um input do tipo select. Ficou assim:
echo $this->Form->input('entity', array(
'update' => '#response',
'url' => array('action' => 'request', 'foo', 'bar'),
'label' => __('Entidade'),
'id' => 'entity',
'options' => array('1' => 'Prospects', '2' => 'Leads'),
'div' => array('class' => 'col-sm-6', 'data-step' => "2", 'data-intro' => "Escolha a entidade", 'data-position' => 'bottom')
Segui todos os passos, mais não funciona. Quando eu copio o seu botão e colo lá ele funciona então não foi nenhum passo que eu eventualmente possa ter esquecido.
Paulo Rodrigues Abril 06th, 2015	 Responder
Devidy, o JsHelper não possui um método específico para este input, então você vai precisar adicionar esse evento de outra forma, que será o equivalente ao bind do próprio jQuery. Ou seja, os parâmetros update e url não vão em qualquer elemento que você queira.
Logo após este seu trecho, faça assim:
$this->Js->get('#entity');
$this->Js->event('change', $this->Js->request(array('action' => 'request', 'foo', 'bar')));
Com isso, no "change" do seu select, adicionamos este request que existe no segundo parâmetro.
Aqui você pode ver outros métodos do JsHelper, além destes que mencionei: http://book.cakephp.org/2.0/en/core-libraries/helpers/js.html#other-methods