Hi all,
i have made a change to autocomplete code, because cache handling
should include extraParams in cache term. I thought this could be
interesting for some of you, so here is the code snippet that should
replace existing function "request" in autocomplete.js :
function request(term, success, failure) {
if (!options.matchCase)
term = term.toLowerCase();
//FIX: extraParams should be included in cacheTerm
var cacheTerm = term;
var extraParams = {
timestamp: +new Date()
};
$.each(options.extraParams, function(key, param) {
var extP = typeof param == "function" ?
param() : param;
extraParams[key] = extP;
cacheTerm = cacheTerm + "_" + key + ":" +extP;
});
var data = cache.load(cacheTerm);
// 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) ){
$.ajax({
// try to leverage ajaxQueue plugin to abort
previous requests
mode: "abort",
// limit abortion to this input
port: "autocomplete" + input.name,
dataType: options.dataType,
url: options.url,
data: $.extend({
q: lastWord(term),
limit: options.max
}, extraParams),
success: function(data) {
var parsed = options.parse &&
options.parse(data) || parse(data);
cache.add(cacheTerm, parsed);
success(term, parsed);
}
});
} else {
// if we have a failure, we need to empty the list --
this prevents
the the [TAB] key from selecting the last successful match
select.emptyList();
failure(term);
}
};