I am working on CakePHP 2.7.8. I want to update related list with change in list using Ajax.
I have a customers table and customer_addresses table in the database and customers and customerAddress models in the project.
There is another controller serviceRequests where I have to select customer and address of the selected customer from a drop down list generated by CakePHP from database.
What I have done-
I have added a function getCustomerAddress in the serviceRequests controller
public function getCustomerAddress(){
$customer_id = $this->request->data['Post']['customer_id'];
$customer_address = $this->CustomerAddress->find('list',array(
'condition' => array('CustomerAddress.customer_id' => $customer_id),
'recursive' => -1
));
$this->set('customerAddresses', $customer_address);
$this->layout = 'ajax';
}
to display the retrieved data, I have a view get_customer_address.ctp
<?php
foreach ($customerAddresses as $key => $value): ?>
<option value="<?php echo $key;?>"><?php echo $value; ?></option>
<?php endforeach; ?>
In the add.ctp view of serviceRequests controller for add function, I have added following script at the last.
<div class="serviceRequests form">
<?php echo $this->Form->create('ServiceRequest'); ?>
<fieldset>
<legend><?php echo __('Add Service Request'); ?></legend>
<?php
echo $this->Form->input('customer_id');
echo $this->Form->input('customer_address_id');
echo $this->Form->input('status');
?>
</fieldset>
<?php echo $this->Form->end(__('Submit')); ?>
</div>
<?php
$this->Js->get('#ServiceRequestCustomerId')->event('change',
$this->Js->request(array(
'controller' => 'serviceRequests',
'action' => 'getCustomerAddress'
), array(
'update' => '#ServiceRequestCustomerAddressId',
'async' => true,
'method' => 'post',
'dataExpression' => true,
'data' => $this->Js->serializeForm(array(
'isForm' => true,
'inline' => true
))
))
);
?>
and to render Js, I have added following code to to last of default.ctp
<!-- script for layout -->
<?php echo $scripts_for_layout; ?>
<!-- Js writeBuffer -->
<?php
if(class_exists('JsHelper') && method_exists($this->Js, 'writeBuffer')) echo $this->Js->writeBuffer ();
// writes cached scripts
?>
But on accessing localhost/serviceRequests/add the ajax call is not working and all customer's name and all customer's addresses are showing in the list.
This is an example of how to implement chained selects with cake http://sandbox.dereuromark.de/sandbox/ajax_examples/chained_dropdowns - the related article for that example is here http://www.dereuromark.de/2014/01/09/ajax-and-cakephp/