我使用的 jQuery.autocomplete(1.02)在我的搜索框和我想的确切字符和子字符串匹配。我不在乎(尚未!)有关数据库的负载,我很高兴为它火了查询每个按键和完全绕过缓存 - 我只是不想错过任何东西。

要为此我试图设置 cacheLength = 1 ,最小允许的,但该自动完成功能拒绝断火每个键一个GET请求。

searchbox          GET_request

   'a'       ->    http://localhost/service_search_request?q=a
   'ar'      ->    http://localhost/service_search_request?q=ar
   'ars'     ->    http://localhost/service_search_request?q=ars

相反,它发出的第一和第三,错过了第二,让我对“AR”错误的结果: - /我已经清除了缓存和会话,但它看起来像某种缓存仍在继续。据我所知我没有代理回事,我移刷新各一次。它看起来可能那么,这种行为是从jQuery.autocomplete本身。

所以我的问题是...

<强> A)这是否似乎是可能的?即是它的特征,或者一个错误?

B)如果这样是有它周围的清洁方法是什么?...

C)如果不是,你会用什么来代替自动完成?

自然 d)不,你只是用它不正确,你阴道灌洗的始终是一个可能性,确实是一个我喜欢有花的时间要沿着这条道路 - 假设它带有一个链接我没能找到/的文档阅读!

干杯,

罗杰:)

有帮助吗?

解决方案

我不知道为什么 cacheLength 不起作用,但与自动完成的麻烦了。恕我直言,也有它的错误。然而,在列表的选项,存在的 matchSubset :您可以设置为false。

修改 地方约335行是一个名为“请求”功能。你可以添加一些调试消息吧,看看会发生什么:(注:您需要萤火虫安装或“控制台”将是未知的)

function request(term, success, failure) {

    console.debug("ac request...");

    if (!options.matchCase)
        term = term.toLowerCase();

    var data = cache.load(term);

    console.debug("ac request 1, loaded data from cache: " + data + " term: " + term);

    // recieve the cached data
    if (data && data.length) {
        success(term, data);
    // if an AJAX url has been supplied, try loading the data now
    } else if( (typeof options.url == "string") && (options.url.length > 0) ){

        console.debug("ac request 2, data is not in the cache, request it");

“flushCache”可以很容易地在可以附加的功能/设置作为选项使用。我用这个,清除高速缓存,如果有可能是在后端更多数据:

formatItem: function (data,i,n,value){
    if(i === (this.max -1)){
        console.debug("flushCache");
        jQuery(this).flushCache();
    }

    return data[1] + " (" + data[0] + ")";
}

其他提示

我有同样的问题。高速缓存不工作,虽然我已设置的选项cacheLength为1

使用您的溶液每个印刷术语它的工作原理后致电flushCache功能。我不能使用:

if(i === (this.max -1)){

,因为“I”,在过滤但“this.max”仍25作为原始后端查询之后e.g 1导致25返回的行。

<强>然而下,这种错误的 ONLY 键入包含瑞典字符 'A', 'A' 或 'O' 时字出现。所以,也许兑付工作正常,但不与这些特殊字符。

反正。对于我的解决办法是始终调用在formatItem()函数flushCache控制:

function formatItem(row, position, n, term) {

    if($("#keywords-h").length > 0){
        $("#keywords-h").flushCache();
        }

        // format Item
        return "<span>" + row[0] + "</span>";
}

希望这可以帮助别人,如果有人是有特殊字符同样的问题,请张贴回复。

有了明显走到这18个月,但

  

cacheLength:0

在选项为我工作。因此,也许最新的版本已经修复了这一错误?

这为我工作。

function requestData(q) {
   if (!options.matchCase) q = q.toLowerCase();

   //-- I turned off this line
   // var data = options.cacheLength ? loadFromCache(q) : null;

   //-- And added this line of code
   var data = null;

有是禁用子集匹配e.g一个选项。

$("#query").autocomplete(
    url,
    {
        matchSubset: false
    }
)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top