我使用jquery ui autocomplete进行搜索,效果很好。目前,我预加载了一个城市和国家的json列表,以便快速加载并且无需轮询服务器。但是现在,我想在我的自动填充搜索中添加特定的地点名称,例如我的酒店,餐馆等。
我的问题是,我应该抛弃预先加载的城市和国家/地区列表并执行简单的vanilla ajax数据库查询吗?q =当他们键入时,或者是否可能并且在两者之间进行某种混合是否有用。 IE是一个预加载的列表,直到它们达到一定数量的字符或少于5个结果?
它会节省加载时间还是只是头疼?如果是这样,我该怎么办呢?
我最初将它作为ajax查询,但切换到预加载的json以加快速度。完整的城市和国家列表很小,但是地点列表很大。 99.9%的时间人们会搜索位置而不是特定的位置。
答案 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/
值得吗?
它会节省加载时间还是只是头疼?
也许两个!
我认为这实际上取决于查询的资源密集程度,我们谈论的数据量,以及这样的解决方案的可维护性。我不能真正推测前两个选项,但我会说你可能会因维护两个列表而遇到维护问题。这个问题取决于您正在使用的服务器端技术。我想如果你做得对,你就不会有任何麻烦。
提前为冗长的答案道歉,但我希望它有所帮助。