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);
                }
        };

Reply via email to