2012-07-12 53 views
0

這是用一個函數來推動建議陣列我的源代碼:jQuery自動完成:如何啓用緩存?

jQuery(document).ready(function ($){ 
    var cache = {}; 
    function split(val) { 
     return val.split(/,\s*/); 
    } 

    function extractLast(term) { 
     return split(term).pop(); 
    } 

    $("#ctags-input") 
     .bind("keydown", function(event) { 
      if (event.keyCode === $.ui.keyCode.TAB && 
        $(this).data("autocomplete").menu.active) { 
       event.preventDefault(); 
      } 
     }) 

    .autocomplete({ 

     source: function(req, add){ 
      var ctags_action = 'suggest_tags'; 

      var term = req.term; 
      if (term in cache) { 
       add(cache[term]); 
       return; 
      } 

    $.getJSON(SuggestTags.url+'?callback=?&action='+ctags_action, req, function(data) { 
       var suggestions = []; 
       $.each(data, function(i, val){        
        suggestions.push({ 
         label: val.name, 
         count: val.count 
        }); 
       }); 
       cache[term] = suggestions; 
       add(suggestions); 

      }); 
     },   
     focus: function() { 
      return false; 
     }, 

     select: function(event, ui) { 
      var terms = split(this.value); 
      terms.pop(); 
      terms.push(ui.item.value); 
      terms.push(""); 
      this.value = terms.join(", "); 
      return false; 
     } 
    }) 

    .data("autocomplete")._renderItem = function(ul, item) {   
     return $("<li></li>") 
     .data("item.autocomplete", item) 
     .append("<a>" + item.label + " (" + item.count+ ")</a>")   
     .appendTo(ul); 
    };  
}); 

要添加的緩存能力,JQ UI現場演示直接使用的數據響應:

source: function(request, response) { 
    var term = request.term; 
    if (term in cache) { 
     response(cache[ term ]); 
     return; 
    } 

    lastXhr = $.getJSON("search.php", request, function(data, status, xhr) { 
    cache[ term ] = data; 
    if (xhr === lastXhr) { 
     response(data); 
    } 
}); 
} 

如何實現這個緩存演示在我的代碼?

回答

1

suggestions置於緩存中。

var term = req.term; 
if (term in cache) { 
    add(cache[term]); 
    return; 
} 
... 
cache[term] = suggestions; 
add(suggestions); 
+0

我更新了我的問題,在緩存中添加了建議,但它仍然發送ajax請求。 – Jenny 2012-07-12 06:04:35

+0

問題在於'var cache = {};',每次輸入函數時都會清空緩存。緩存需要是該函數之外的全局變量。 – Barmar 2012-07-12 06:45:35

+0

我剛搬了'var cache = {};'在函數外部並將其放在函數($)的開頭。它仍然沒有使用緩存。 – Jenny 2012-07-12 07:30:54