Как кешировать результаты в простом автозаполнении - PullRequest
0 голосов
/ 05 мая 2018

Я пишу простой скрипт завершения тега textarea. Так как я могу кешировать старые результаты?

Я пытаюсь следующий код:

                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 ...........

Я использую для слияния: fallback.concat(dl), "dl" - это успешные данные по автозаполнению.

Но массив не unique и это проблема.

Это полные коды:

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

                }
            });

Сноска: return false; Неправильно (не в dom, просто скрипт прекратит работу) после нескольких нажатий клавиш ...

                       if(dl[0]){
                           callback(dl);
                           return false;
                       }
                       else
                           return true;                                 

1 Ответ

0 голосов
/ 05 мая 2018

Ухх, попробуй попробуй попробуй наконец я это решил: 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;
}

вызов кеша поиска ключа: return false;

Наконец код:

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

            }
        });

Теперь работаем с данными кэширования.

...