我在我的搜索框上使用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本身.
所以我的问题是……
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] + ")";
}