![](/img/trans.png)
[英]Debugger not reaching select statement in jQuery.autocomplete
[英]Bypass all cacheing on 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不起作用,但也有自動完成的麻煩。 恕我直言,它有錯誤。 但是,在選項列表中 ,有一個matchSubset可以設置為false。
編輯:第335行附近的某個地方叫做“請求”。 您可以向其添加一些調試消息,以查看會發生什么:(注意:您需要安裝firebug或“console”將是未知的)
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'在過濾后是例如1,但是'this.max'仍然是25,因為原始后端查詢導致25個返回的行。
但是 , 只有在輸入包含瑞典字符'å','ä'或'ö'的單詞時才會出現此錯誤。 因此,兌現可能會按預期進行,但不能與這些特殊字符一起使用。
無論如何。 我的解決方案是始終在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
在為我工作的選項中。 也許最新版本修復了這個bug?
這對我有用。
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;
可以選擇禁用子集匹配,例如
$("#query").autocomplete(
url,
{
matchSubset: false
}
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.