Если вы делаете страницу поиска, я рекомендую передавать параметры, используя GET вместо POST.Часто пользователи добавляют в закладки свои поиски, если это делается с помощью POST, тогда результаты не могут быть сохранены.
Вот (быстро взломанный) пример того, как выполнить автозаполнение.
Ваш поисковый запрос
<form method="get" action="/controller/search">
<?php echo $this->Form->input('Search.searchby', array('type' => 'select', 'options' => $searchByList, 'label' => 'Search By:'));?>
<?php echo $ajax->autoComplete('Search.searchvalue', '/controller/autoComplete/', array('minChars' => 2)); ?>
<input name="search" type="submit" value="Search"/>
</form>
Для него требуется контроллер с именем 'controller', который использует две функции ('поиск' и 'автозаполнение')
function search() {
// GET parameters for search
$searchby = (isset($this->params['url']['searchby'])) ? ( $this->params['url']['searchby']) : '';
$searchvalue = (isset($this->params['url']['searchvalue'])) ? ( $this->params['url']['searchvalue']) : '';
// DO SEARCH HERE
$conditions = array('searchby'=>$searchby, 'searchvalue' => $searchvalue);
…etc…
}
function autocomplete() {
if(!empty($this->data['Search']['searchvalue'])){
$rs = $this->Search->findAll(array('searchvalue' => "LIKE {$this->data['Search']['searchvalue']}%" ));
$this->set('searchvalues', $rs);
}
$this->render('autocomplete', 'ajax');
}
Часть автозаполнения ajax нуждается в представлениишаблон с именем 'autocomplete.ctp'
<!-- autocomplete.ctp -->
<ul>
<?php if(isset($searchvalues) && !empty($searchvalues)){ ?>
<?php foreach($searchvalues as $t) { ?>
<li><?php echo $t['Search']['searchvalue']; ?></li>
<?php } ?>
<?php } ?>
</ul>
Это должно направить вас в правильном направлении.
(Если вы хотели получить значение тега select и передать его через ajax, вам следует взглянуть на функции ajax для сериализации формы. Возможно, вам придется вручную написать код javascript, как яне знаю, есть ли у помощника ajax опции для сериализации формы. вот код, который я использовал для сериализации просто тег выбора. может быть полезным)
<?php
$graph_type = array(
'impressions'=>'Impressions',
'click_throughs'=>'Click Throughs',
'click_through_ratio'=>'Click Through Ratio',
'time_with_brand'=>'Time with Brand',
'average_time_with_brand'=>'Average Time with Brand'
);
echo $html->selectTag('Graph/type', $graph_type, null, array('onChange' => 'event.returnValue = false; return false;', 'style' => 'margin-right:20px;'),null, false);
echo $javascript->event("'GraphType'", "change",
$ajax->remoteFunction(
array(
'update' => 'graph_container',
'url' => '/reports/ajax_graph_multiple',
'with'=>"Form.serialize('reports_form')"
)
)
);
?>