2009-07-14 96 views
0

我想为我的搜索框实现一个基于ajax的自动完成功能,我碰到了,implementing autocomplete in my website从MYSQL表AJAX自动完成查询

现在我想知道的是,我附加一个数据源到控件,但到目前为止,我已经看到数据源需要一个文本库模式,我不喜欢它的查询,它控制调用查询并且它返回控件的过滤器必须应用的记录。

希望我的问题是清楚的

回答

1

你怎么认为你可以将其链接到客户端的查询? 您可以将其链接到服务器的AJAX调用,该服务器返回选项列表。 控件的过滤器将在该选项列表上执行其他过滤。

最好的做法是,火的AJAX 在页面加载,到服务器的功能,这将查询到数据库(MySQL的你的情况),并在JSON格式获取选项列表。将选项列表分配为自动完成的输入。 (它显然比每次用户开始在搜索框中输入ajax-request都好。)

如果你使用jquery,它可以是这样的。

$(function(){ //runs on page load 

$.ajax({ 
    type: "POST", 
    url: "/searchlist/", //server function that returns the search list 
    data: '', 
    dataType: "json", 
    success: function(json){ 
    search_choices = json.list; // search option list 
    $("input#searchbox").autocomplete(search_choices, { 
           max: 4, 
           scroll: false, 
           autoFill: true, 
           multiple: true, 
           matchContains: true, 
           multipleSeparator: " ", 
           width: 180 
          }); 

    } 
}); 

}); 

我可以提供你在图书馆以外的例子,但jquery,但我希望这可以让你找到自己的方式。

编辑:不,您的数据库不需要排序的选择。这是你的服务器功能,应该做所有的排序。使用,

autocomplete(url_to_server_function, options) 

并且您的服务器功能将获取搜索词(搜索框中的关键字用户类型),作为获取请求。在那里过滤数据库,这是您可以将相关单词与结果挂钩的地方。只需列出您希望显示为建议的所有内容,然后以序列化json格式返回,并让自动完成负责匹配和排序数据。

+0

我喜欢你的想法,我只做类似的事情。不过,我现在有一个新的疑问。我的数据库是否必须以我希望显示的方式包含数据?我的意思是,当我输入“com”时,它会查询我的数据库中所有以“com”开头的关键字,并将它们显示为电脑,隔间等。但是,如果我希望它更复杂并将其与相关单词相结合,就像谷歌的建议,所以“com”可能意味着“来这里”,“电脑课程”等。雅虎YUI Widget或任何其他提供的功能呢? – 2009-07-14 09:49:47