簡體   English   中英

繞過jQuery.autocomplete上的所有緩存(1.02)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM