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);
}
});
}
如何實現這個緩存演示在我的代碼?
我更新了我的問題,在緩存中添加了建議,但它仍然發送ajax請求。 – Jenny 2012-07-12 06:04:35
問題在於'var cache = {};',每次輸入函數時都會清空緩存。緩存需要是該函數之外的全局變量。 – Barmar 2012-07-12 06:45:35
我剛搬了'var cache = {};'在函數外部並將其放在函數($)的開頭。它仍然沒有使用緩存。 – Jenny 2012-07-12 07:30:54