2009-08-12 52 views
0

我已经使用Scriptaculous js框架的Ajax.autocompleter函数实现了自动完成功能。代码正在工作,但是我填充了整个列表,而不是填充与我指定的字母匹配的条目。 这是我的代码:在Ajax.autocompleter函数中填充整个列表

这是获取自动建议条目的js函数。

new Ajax.Autocompleter("autocomplete", "autocomplete_choices", 
         "http://localhost/FormBuilder/forms/autoComplete",{}); 

这是自动完成框和条目填充的条目。

<input type="text" id="autocomplete" name="autocomplete_parameter"/> 
    <div id="autocomplete_choices" class="autocomplete"></div> 

而且这是在形式的控制器,其中获得对应类型的信用户的列表中自动完成的动作。

function autoComplete() 
{ 
    $this->set('users',$this->User->find('all',array('fields'=>array('User.id','User.name'), 
                'conditions'=>array('User.name LIKE' => $this->data['User']['name'].'%') 
                ) 
             ) 
    ); 
    $this->layout = "ajax"; 
} 

但是假设,如果我输入字母“P”,我得到显示以字母“P”的那些的整个用户的列表,而不是。为什么我会遇到这个问题?我哪里错了?

回答

0

那么,我发现答案..其实是一个错误。我应该将paramName选项添加到Ajax.autocompleter函数中,并且应该在控制器函数的$ _REQUEST方法中获取值。

new Ajax.Autocompleter("autocomplete", "autocomplete_choices", 
         "http://localhost/FormBuilder/forms/autoComplete", 
         {paramName:"autocomplete"}); 

function autoComplete() 
{ 
    $userName=$_REQUEST['autocomplete']; 
    $this->set('users',$this->User->find('all',array(
            'fields'=>array('User.id','User.name'), 
          'conditions'=>array('User.name LIKE' => $userName.'%')) 
                    ) 
      ); 
    $this->layout = "ajax"; 
} 

现在我只得到以字母开头的条目。