I am write a simple textarea tag completer script. So how to can i cache the old results?
I try following code:
var lastQuery = term.toLowerCase();
if(fallback[0]){
var dl = [];
for(k=0; k<fallback.length; k++){
var name = fallback[k].name.toLowerCase();
if( name.substr(0, lastQuery.length) == lastQuery ){
dl.push(fallback[k]);
}
}
if(dl[0]){
callback(dl); // "callback" Dropdown trigger
return false;
}
else
return true;
// .......... following the autocomplete function ...........
I'm using for merge: fallback.concat(dl)
, "dl"
is a succesfully data on the autocomplete.
But array not unique
and this a problem.
It full codes:
var lastQuery = term.toLowerCase();
if(fallback[0]){
var dl = [];
for(k=0; k<fallback.length; k++){
var name = fallback[k].name.toLowerCase();
if( name.substr(0, lastQuery.length) == lastQuery ){
dl.push(fallback[k]);
}
}
if(dl[0]){
callback(dl);
return false;
}
else
return true;
}
// Here is autocomplete function
$.ajax({
url: homeurl+'/api/hashtag/index.php',
type: "POST",
dataType: 'json',
data: { query: term },
success: function (data) {
var x = data;
if(x.hashtag){
var dl = [];
for(i=0; i<x.hashtag.length; i++){
var name = x.hashtag[i].name.toLowerCase();
if( name.substr(0, lastQuery.length) == lastQuery ){
dl.push(x.hashtag[i]);
}
}
if(dl[0]){
fallback = fallback.concat(dl);
callback(dl);
}
else
callback(null);
} else {
callback(null);
}
}
});
Footnote: return false;
get wrong (not in dom, just script stop work) after the a few keystroke...
if(dl[0]){
callback(dl);
return false;
}
else
return true;
Uhhh, try try try finally i am solved it: function arrayUniqueForHashtag()
function arrayUniqueForHashtag(array) {
var a = array.concat();
for(var i=0; i<a.length; ++i) {
for(var j=i+1; j<a.length; ++j) {
if(a[i].name == a[j].name)
a.splice(j--, 1);
}
}
return a;
}
call the cache key search: return false;
Finally code:
var lastQuery = term.toLowerCase();
if(fallback[0]){
var dl = [];
for(k=0; k<fallback.length; k++){
var name = fallback[k].name.toLowerCase();
if( name.substr(0, lastQuery.length) == lastQuery ){
dl.push(fallback[k]);
}
}
if(dl[0]){
callback(dl);
return false;
}
// else
// return true;
}
// Here is autocomplete function
$.ajax({
url: homeurl+'/api/hashtag/index.php',
type: "POST",
dataType: 'json',
data: { query: term },
success: function (data) {
var x = data;
if(x.hashtag){
var dl = [];
for(i=0; i<x.hashtag.length; i++){
var name = x.hashtag[i].name.toLowerCase();
if( name.substr(0, lastQuery.length) == lastQuery ){
dl.push(x.hashtag[i]);
}
}
if(dl[0]){
fallback = arrayUniqueForHashtag(fallback.concat(dl));
callback(dl);
}
else
callback(null);
} else {
callback(null);
}
}
});
Working now on the caching data.