微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 绕过jQuery.autocomplete上的所有缓存(1.02)

我在我的搜索框上使用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’的错误结果: – /我已经清除了我的缓存和会话但看起来某种缓存仍在继续. AFAIK我没有任何代理,我每次都换班.看起来这种行为很可能来自jQuery.autocomplete本身.

所以我的问题是……

A)这看起来有可能吗?即它是一个功能,还是一个错误

B)如果是这样,它周围有一个干净的方式?…

C)如果没有,你会使用什么自动完成?

当然D)不,你只是错误地使用它你冲洗!总是有可能,而且我确实喜欢花时间走这条路 – 假设它附带了我未能找到/读取的文档的链接

干杯,

罗杰:)

解决方法:

我想知道为什么cacheLength不起作用,但也有自动完成的麻烦.恕我直言,它有错误.但是,在list of options中,有一个matchSubset可以设置为false.

编辑:
第335行附近的某个地方叫做“请求”.您可以向其添加一些调试消息,以查看会发生什么:(注意:您需要安装firebug或“控制台”将是未知的)

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] + ")";
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐