如何使用jquery-select2上下文对象来优化搜索结果?

时间:2014-02-05 14:28:09

标签: jquery jquery-select2

(首先,这是第一次提交者的道歉,因为我太过教练而无法将文档翻译成工作解决方案而产生的问题。希望有人会对我表示同情:))

基本上我有以下简单的基于ajax的select2输入字段工作:

$(document).ready(function () {

    var allUsersUrl = '/cmd/match_list/usrname';

    $('#username').select2({
        placeholder: 'Enter username',
        minimumInputLength: 3,
        allowClear: true,
        dropdownAutoWidth: true,
        ajax: {
            quietMillis: 150,
            url: allUsersUrl,
            dataType: 'json',
            data: function (term, page, context) {
                return {
                    fullstr: "n",
                    fromldap: "y",
                    exact: "n",
                    string: term,
                };
            },
            results: function (data, page) {
                return { results: data.Results };
            }
        }
    });
}
.
.
.
<input id="username" name="username">

...但由于这涉及相对缓慢且昂贵的后端LDAP查询,我希望在查找之后收到的任何后续按键搜索初始结果,而不是启动另一个全新(但非常相似)的结束查找。

例如,当我在字段中键入“smi”时,会显示52个匹配的候选名单。当我按't'时,我想在候选名单中寻找'smit',而不是按照目前的情况进行另一次后端查找。

文档讨论了一个与我的问题非常相关的“context”对象,但我似乎无法从那里跳到一个有效的解决方案,到目前为止我找不到任何例子使用此对象的其他人。

如果这只是本论坛中不属于的基本内容,我们将非常感激地收到任何建议,并再次道歉。提前谢谢。

1 个答案:

答案 0 :(得分:0)

查看您引用的上下文文档,它表示上下文可用于分析一个搜索词的结果,并且当更改搜索词时删除上下文对象。

因为你正在处理对ldap的慢速api调用,我怀疑你必须引入一个缓存层。一种简单的方法是将ldap结果存储在数据库或memcache键值对中的ldapcache表中。

然后你可以重复使用'smi'的响应几分钟。