jquery ui自动完成复杂搜索,包含前置和后置结果

时间:2011-08-04 07:08:48

标签: jquery json jquery-ui autocomplete jquery-ui-autocomplete

我使用jquery ui autocomplete进行搜索,效果很好。目前,我预加载了一个城市和国家的json列表,以便快速加载并且无需轮询服务器。但是现在,我想在我的自动填充搜索中添加特定的地点名称,例如我的酒店,餐馆等。

我的问题是,我应该抛弃预先加载的城市和国家/地区列表并执行简单的vanilla ajax数据库查询吗?q =当他们键入时,或者是否可能并且在两者之间进行某种混合是否有用。 IE是一个预加载的列表,直到它们达到一定数量的字符或少于5个结果?

它会节省加载时间还是只是头疼?如果是这样,我该怎么办呢?

我最初将它作为ajax查询,但切换到预加载的json以加快速度。完整的城市和国家列表很小,但是地点列表很大。 99.9%的时间人们会搜索位置而不是特定的位置。

1 个答案:

答案 0 :(得分:4)

如何实现这一目标:

您可以通过将函数传递给自动完成的source选项来完成此类操作。在该函数中,您将执行一些逻辑来确定是否需要使用AJAX调用或只是在客户端过滤数据:

$("#tags").autocomplete({
    source: function(request, response) {
        // This is how autocomplete finds matching results by default:
        var results = $.ui.autocomplete.filter(common, request.term);

        if (results.length < 5) {
            // Perform an ajax call.
            // In the success method, call response(results)
        } else {
            response(results);
        }
    }
});

使用两个来源的“混合”自动填充的两个想法都很吸引人。但是,在测试解决方案时,我遇到了潜在的可用性问题。通常使用这种类型的控件,您可以在键入时获得更少的结果。

例如:假设您的本地源数组如下所示:

['jquery', 'jquery-ui', 'jquery-ajax', 'jquery-plugins']

然后使用显示更多结果的策略,比如输入5个字符。在用户键入j-q-u-e-r-y后,键入y将触发AJAX调用,使用更多结果填充列表,根据您的使用情况,这可能对用户来说不是直截了当的。

示例: http://jsfiddle.net/andrewwhitaker/wSBa3/

我认为当您对可从服务器返回的结果数量设置一些限制时,这会变得更好。如果在AJAX调用发生之前将此值与最小结果数同步,则交互看起来并不那么时髦。事实上,这个例子使我对这个概念更合理:

示例: http://jsfiddle.net/andrewwhitaker/NxELC/


值得吗?

  

它会节省加载时间还是只是头疼?

也许两个!

我认为这实际上取决于查询的资源密集程度,我们谈论的数据量,以及这样的解决方案的可维护性。我不能真正推测前两个选项,但我会说你可能会因维护两个列表而遇到维护问题。这个问题取决于您正在使用的服务器端技术。我想如果你做得对,你就不会有任何麻烦。

提前为冗长的答案道歉,但我希望它有所帮助。