【问题标题】:jquery ui autocomplete complex search with pre and post resultsjquery ui 自动完成复杂搜索,带有前后结果
【发布时间】:2011-10-19 17:30:59
【问题描述】:

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

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

它会节省加载时间还是让人头疼?如果是这样,我应该怎么做?

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

【问题讨论】:

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


    【解决方案1】:

    您将如何实现这一目标:

    您可以通过将函数传递给自动完成的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/


    值得吗?

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

    也许两者都有!

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-01
      相关资源
      最近更新 更多