Я пытаюсь сделать автозаполнение функции в CakePHP, но не удалось. Я попробовал следующий код.
public function find() {
if ($this->request->is('ajax')) {
$this->autoRender = false;
$country_name = $this->request->data['Country']['name'];
$results = $this->Country->find('all', array(
'conditions' => array('Country.name LIKE ' => '%' . $country_name . '%'),
'recursive' => -1
));
foreach($results as $result) {
echo $result['Country']['name'] . "\n";
}
echo json_encode($results);
}
}
// Форма и jquery
<?php
echo $this->Form->create('Country', array('action' => 'find'));
echo $this->Form->input('name',array('id' => 'Autocomplete'));
echo $this->Form->submit();
echo $this->Form->end();
?>
<script type="text/javascript">
$(document).ready(function($){
$('#Autocomplete').autocomplete({
source:'/countries/find',
minLength:2
});
});
</script>
foreach($results as $result) {
echo $result['Country']['name'] . "\n";
}
Разрушает вашу структуру JSON.
Имейте в виду, что для автозаполнения по умолчанию ожидаются ключи «label» и значения в вашей таблице JSON, поэтому весь сценарий должен делать после извлечения записей БД:
$resultArr = array();
foreach($results as $result) {
$resultArr[] = array('label' =>$result['Country']['name'] , 'value' => $result['Country']['name'] );
}
echo json_encode($resultArr);
exit(); // may not be necessary, just make sure the view is not rendered
Кроме того, я бы создал URL для вашего источника данных в настройке jQuery
source:'<?=$this->Html->url(array("controller" => "countries","action"=> "find")); ?>',
И попробуйте закомментировать (просто чтобы убедиться, что условие не выполнено запросом, когда autocomplete делает его вызов)
if ($this->request->is('ajax')) {
состояние
Других решений пока нет …