--- jquery.autocomplete.js.orig 2010-01-15 11:00:55.000000000 -0700 +++ jquery.autocomplete.js 2010-01-15 11:04:02.000000000 -0700 @@ -14,7 +14,7 @@ $.fn.extend({ autocomplete: function(urlOrData, options) { - var isUrl = typeof urlOrData == "string"; + var isUrl = typeof urlOrData == "string" || typeof urlOrData == "function"; options = $.extend({}, $.Autocompleter.defaults, { url: isUrl ? urlOrData : null, data: isUrl ? null : urlOrData, @@ -346,10 +346,14 @@ term = term.toLowerCase(); var data = cache.load(term); // recieve the cached data + var url = options.url; + if (typeof url == "function") { + url = options.url(); + } 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) ){ + } else if( (typeof url == "string") && (url.length > 0) ){ var extraParams = { timestamp: +new Date() @@ -364,14 +368,16 @@ // limit abortion to this input port: "autocomplete" + input.name, dataType: options.dataType, - url: options.url, + url: url, data: $.extend({ q: lastWord(term), limit: options.max }, extraParams), success: function(data) { var parsed = options.parse && options.parse(data) || parse(data); - cache.add(term, parsed); + if (typeof options.url != "function") { + cache.add(term, parsed); + } success(term, parsed); } });