CakePHP Ajax: список обновлений с изменением связанного списка

Я работаю над CakePHP 2.7.8. Я хочу обновить связанный список с изменением списка с помощью Ajax.

У меня есть таблица customers и таблица customer_addresses в базе данных и модели customers и customerAddress в проекте.

Есть еще один контроллер serviceRequests, где я должен выбрать customer и адрес выбранного клиента из выпадающего списка, сгенерированного CakePHP из базы данных.

Что я сделал- я добавил функцию getCustomerAddress в контроллер serviceRequests

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';
        }

для отображения полученных данных у меня есть представление get_customer_address.ctp

<?php
foreach ($customerAddresses as $key => $value): ?>
<option value="<?php echo $key;?>"><?php echo $value; ?></option>
<?php endforeach; ?>

В представлении add.ctp контроллера serviceRequests для функции add я наконец добавил следующий скрипт.

<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
            ))
        ))
        );
?>

и для рендеринга Js я добавил следующий код к последнему из 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
    ?>

Но при доступе к localhost/serviceRequests/add вызов ajax не работает, и все имена клиентов и все адреса клиентов отображаются в списке.


person Anuj TBE    schedule 02.02.2016    source источник


Ответы (1)


Это пример того, как реализовать цепочку выбора с тортом http://sandbox.dereuromark.de/sandbox/ajax_examples/chained_dropdowns — соответствующая статья для этого примера находится здесь http://www.dereuromark.de/2014/01/09/ajax-and-cakephp/

person Megs Lalk    schedule 18.02.2016