Cakephp3 jQuery自动完成
问题描述:
我是CakePHP3(+ stackoverflow)的新手,尝试实现自动完成。我想将自动完成功能附加到我的index.ctp中的searchinput中。Cakephp3 jQuery自动完成
- 请求返回所有汽车对象(忽略get.term)
- 的响应没有连接到searchinput
将是罚款得到一些帮助 - 谢谢!
index.ctp
<?php
echo $this->Form->create('Cars');
echo $this->Form->input('name', [
'label' => 'Search',
'id' => 'autocomplete',
'class' => 'ui-autocomplete'
]);
echo $this->Form->button('Search', ['type' => 'submit']);
echo $this->Form->end();
?>
<script>
$("#autocomplete").autocomplete(
{
search: function() {},
source: function (request, response)
{
$.ajax(
{
source: "/cars/autocomplete",
dataType: "json",
data:
{
term: request.term,
},
success: function (data)
{
response(data);
console.log(data);
}
});
},
minLength: 2
});
</script>
CarsController.php
function autocomplete() {
if ($this->request->is('ajax','get')) {
$term = $this->request->data["term"];
$terms = $cars->find('all', [
'conditions' => ['Cars.name >' => $term],
'limit' => 10
]);
$data = array();
foreach($terms as $term) {
$row = $term->name;
array_push($data, $row);
}
// $this->layout = 'ajax';
$this->set('terms', $terms);
echo json_encode($data);
// return json_encode($data);
}
else {
echo json_encode('Nothings found');
}
}
答
好吧,我只是找到了解决方案(可能不是一个完美的?!)。这里是我的代码
index.ctp
<script>
$(function() {
$("#autocomplete").autocomplete({
minLength: 1,
source: function(request, response) {
$.ajax({
url: "<?php echo Router::url(['controller' => 'Cars', 'action' => 'autocomplete']);?>" + '?term=' +
request.term,
dataType: "json",
success: function (data)
{
response(data);
console.log(data);
}
});
}
});
});
</script>
CarsController.php动作自动完成
public function autocomplete() {
$this->autoRender = false;
$terms = $this->Cars->find('list', array(
'conditions' => array(
'Cars.name LIKE' => trim($this->request->query['term']) . '%'
)
));
echo json_encode($terms);
}