我想使用jquery在cakephp 2.5.6中实现自动完成搜索,但是当我在搜索中输入单词时,它返回错误404找不到。我认为它无法进入我的数据库。请给出一些help.Thanks提前。 这是我的控制器名为users
class UsersController extends AppController{
var $helpers = array('Bootstrap');
var $name = 'Users';
var $components = array('RequestHandler');
public function home(){}
public function find() {
$this->User->recursive = -1;
if ($this->RequestHandler->isAjax()) {
Configure::write ( 'debug', 0 );
$this->autoRender = false;
$this->layout = 'ajax';
$results = $this->User->find('all', array('fields' => array('User.username'),
'conditions' => array('User.username LIKE ' => '%'.$this->request->query['term'] . '%'),
'group' => array('User.username'),
));
$i=0;
foreach($results as $result){
$response[$i]['value']=$result['User']['id'];
$response[$i]['label']=$result['User']['username'];
$i++;
}
echo json_encode($response);
console.log($response);}}
}
我的观点是:
<fieldset>
<legend></legend>
<?php echo $this->Form->create('User', array('type'=>'post','action' => 'find'));
echo $this->Form->input('username', array(
'type' => 'text',
'empty' => 'Pick a username',
'label' => 'username',
// 'option'=> $users,
'id' => 'username',
'autocomplete' => 'on'));
echo $this->Form->submit('submit',array(
'class' => 'btn btn-primary',
'div' => false));
?>
</fieldset>
</div>
<script>
$(document).ready(function(){
var username = $('#username');
username.defaultText('Search for people');
// Using jQuery UI’s autocomplete widget:
username.autocomplete({
minLength : 1,
source: '/cakephp/livesearch/users/find.json'
});
});
// A custom jQuery method for placeholder text:
$.fn.defaultText = function(value){
var element = this.eq(0);
element.data('defaultText',value);
element.focus(function(){
if(element.val() == value){
element.val('').removeClass('defaultText');
}
}).blur(function(){
if(element.val() == '' || element.val() == value){
element.addClass('defaultText').val(value);
}
});
return element.blur();
}
</script>
我认为脚本中存在一个问题,我在寻找找到函数的路径。它不是在查询数据库。 错误如下:
GET http://localhost/cakephp/livesearch/users/find.json?term=s 404 (Not Found).
我期待着一些帮助。谢谢。
答案 0 :(得分:1)
尝试替换它:
source: '/cakephp/livesearch/users/find.json'
为此:
source:'<?php echo $this->Html->url(array("controller" => "users","action"=> "find")); ?>'
我遇到了同样的错误404问题。它对我有用。
答案 1 :(得分:0)
您在控制器中使用find方法作为视图。 这是可能的,但你需要正确地做到这一点。 现在,cakephp无法解析您的请求路线。
查看http://book.cakephp.org/2.0/en/views/json-and-xml-views.html#
到目前为止我能看到的2个问题你需要解决:Router :: parseExtensions()和$ this-&gt; set(&#39; _serialize&#39; ...