jquery ui自动完成复杂搜索,并显示预搜索和后搜索结果

jquery ui自动完成复杂搜索,并显示预搜索和后搜索结果,jquery,json,jquery-ui,autocomplete,jquery-ui-autocomplete,Jquery,Json,Jquery Ui,Autocomplete,Jquery Ui Autocomplete,我有一个使用jQueryUIAutoComplete的搜索,效果很好。目前,我预加载了一个城市和国家的json列表,以便快速加载,而无需轮询服务器。但是现在,我想在我的自动完成搜索中添加一些特定的地名,比如酒店、餐厅等 我的问题是,我应该抛弃预先加载的城市和国家列表,做一个简单的ajax数据库查询吗?q=根据它们的类型,还是有可能并且有必要在两者之间进行某种混合。即预加载列表,直到它们达到一定数量的字符或结果少于5个 这会节省加载时间还是会让人头疼?如果是的话,我该怎么做呢 我最初将其作为aja

我有一个使用jQueryUIAutoComplete的搜索,效果很好。目前,我预加载了一个城市和国家的json列表,以便快速加载,而无需轮询服务器。但是现在,我想在我的自动完成搜索中添加一些特定的地名,比如酒店、餐厅等

我的问题是,我应该抛弃预先加载的城市和国家列表,做一个简单的ajax数据库查询吗?q=根据它们的类型,还是有可能并且有必要在两者之间进行某种混合。即预加载列表,直到它们达到一定数量的字符或结果少于5个

这会节省加载时间还是会让人头疼?如果是的话,我该怎么做呢

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

如何实现这一点:

您可以通过将函数传递给autocomplete的
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);
        }
    }
});
你使用的策略是在输入5个字符后显示更多的结果。在用户键入
j-q-u-e-r-y
之后,键入
y
将触发一个AJAX调用,用更多的结果填充列表,这对于用户来说可能并不简单,具体取决于您的用例

示例:

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

示例:


值得吗?

这会节省加载时间还是会让人头疼

也许两者都有

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

对于冗长的回答,我提前表示歉意,但我希望这能有所帮助

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