Side navigation
#2757 closed bug (invalid)
Opened April 28, 2008 11:46PM UTC
Closed June 10, 2009 09:15AM UTC
Last modified March 14, 2012 09:54PM UTC
Autocomplete plugin: Call external web service to query data
| Reported by: | coreycoto | Owned by: | joern |
|---|---|---|---|
| Priority: | major | Milestone: | 1.2.4 |
| Component: | plugin | Version: | 1.2.3 |
| Keywords: | autocomplete | Cc: | |
| Blocked by: | Blocking: |
Description
Code:
$("#txtTagInput").autocomplete('http://server/
webservice', {
contentType: "application/json",
cacheLength: 1,
max: 10,
multiple: true,
dataType: 'json'
});
function request(term, success, failure) {
if (!options.matchCase)
term = term.toLowerCase();
var data = cache.load(term);
// 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) ){
var extraParams = {
timestamp: +new Date()
};
$.each(options.extraParams, function(key, param) {
extraParams[key] = typeof param == "function" ? param() : param;
});
$.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) {
if (options.dataType == "json") {
cache.flush();
cache.populateUrlData(data);
var results = cache.load(term);
success(term, results);
}
else {
var parsed = options.parse && options.parse(data) ||
parse(data);
cache.add(term, 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);
}
};
jquery.autocomplete.js Code:
function populate(urlData){
if (urlData) {
options.data = urlData;
}
[original populate() function]
return {
flush: flush,
add: add,
populate: populate,
populateUrlData: function(urlData) { populate(urlData); },
load: function(q) {
Attachments (0)
Change History (3)
Changed April 29, 2008 10:57PM UTC by comment:1
| owner: | → joern |
|---|
Changed May 01, 2008 06:29AM UTC by comment:2
| component: | core → plugin |
|---|---|
| description: | Code: \ $("#txtTagInput").autocomplete('http://server/ \ webservice', { \ contentType: "application/json", \ cacheLength: 1, \ max: 10, \ multiple: true, \ dataType: 'json' \ }); \ \ \ function request(term, success, failure) { \ if (!options.matchCase) \ term = term.toLowerCase(); \ var data = cache.load(term); \ // 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) ){ \ \ \ var extraParams = { \ timestamp: +new Date() \ }; \ $.each(options.extraParams, function(key, param) { \ extraParams[key] = typeof param == "function" ? param() : param; \ }); \ \ \ $.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) { \ if (options.dataType == "json") { \ cache.flush(); \ cache.populateUrlData(data); \ var results = cache.load(term); \ success(term, results); \ } \ else { \ var parsed = options.parse && options.parse(data) || \ parse(data); \ cache.add(term, 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); \ } \ }; \ \ \ jquery.autocomplete.js Code: \ function populate(urlData){ \ if (urlData) { \ options.data = urlData; \ } \ \ \ [original populate() function] \ \ \ return { \ flush: flush, \ add: add, \ populate: populate, \ populateUrlData: function(urlData) { populate(urlData); }, \ load: function(q) { \ \ \ \ \ → Code: \ {{{ \ $("#txtTagInput").autocomplete('http://server/ \ webservice', { \ contentType: "application/json", \ cacheLength: 1, \ max: 10, \ multiple: true, \ dataType: 'json' \ }); \ \ \ function request(term, success, failure) { \ if (!options.matchCase) \ term = term.toLowerCase(); \ var data = cache.load(term); \ // 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) ){ \ \ \ var extraParams = { \ timestamp: +new Date() \ }; \ $.each(options.extraParams, function(key, param) { \ extraParams[key] = typeof param == "function" ? param() : param; \ }); \ \ \ $.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) { \ if (options.dataType == "json") { \ cache.flush(); \ cache.populateUrlData(data); \ var results = cache.load(term); \ success(term, results); \ } \ else { \ var parsed = options.parse && options.parse(data) || \ parse(data); \ cache.add(term, 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); \ } \ }; \ \ \ jquery.autocomplete.js Code: \ function populate(urlData){ \ if (urlData) { \ options.data = urlData; \ } \ \ \ [original populate() function] \ \ \ return { \ flush: flush, \ add: add, \ populate: populate, \ populateUrlData: function(urlData) { populate(urlData); }, \ load: function(q) { \ \ }}} \ \ \ |
See the duplicate #2756 in case that has needed info.
Changed June 10, 2009 09:15AM UTC by comment:3
| resolution: | → invalid |
|---|---|
| status: | new → closed |
The autocomplete plugin is now developed under the jQuery UI umbrella. Reopen a ticket there (http://dev.jqueryui.com/) or participate on the planning wiki (http://wiki.jqueryui.com/Autocomplete) if appropiate.