Thursday, May 23, 2013

CakePHP and AJAX submitting a form with jQuery


A couple of years back I wrote an article about how to handle the dependent drop down lists problem using CakePHP's Ajax facilities. Today i will put down a trivial example of how to submit a CakePHP created form using jQuery as a small reference that can be easily pasted.



Let me remind you of the CakePHP ajax way. You start by creating a controller method that will "return" the ajax content. For our trivial example, the following controller will be more than enough.



class AjaxController extends AppController {
var $name = 'Ajax';
var $uses = NULL;

public function helloAjax()
{
$this->layout='ajax';
// result can be anything coming from $this->data
$result = 'Hello Dolly!';
$this->set("result", $result);
}
}


The corresponding view file view/ajax/hello_ajax.ctp should contain just the following:



<?php echo $result; ?>


Setting up our Ajax call is now as easy as, creating a link or a button that will invoke the asynchronous call and then setting the id of the field that will receive the result. A typical setup would be that the link looks something like this :



<a href="#" id="performAjaxLink">Do Ajax </a>


And then the target field can be created using:



<?php echo $this->Form->input('your_field', array('id' => 'resultField')); ?>


Finally a little script at the end of the file ...



<script>
jQuery("#performAjaxLink").click(
function()
{
jQuery.ajax({
type:'POST',
async: true,
cache: false,
url: '<?php echo Router::Url(array('controller' => 'ajax','admin' => FALSE, 'action' => 'helloAjax'), TRUE); ?>',
success: function(response) {
jQuery('#resultField').val(response);
},
data:jQuery('form').serialize()
});
return false;
}
);
</script>


The jQuery Ajax API is available here.

0 comments:

Post a Comment