Как сделать автозаполнение формы в cakephp?

Я пытаюсь сделать автозаполнение функции в 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>

0

Решение

       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')) {

состояние

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector