如何在简单的自动完成中缓存结果

时间:2018-05-05 14:40:37

标签: javascript ajax merge autocomplete unique

我正在写一个简单的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 :(得分:0)

嗯,尝试尝试最后我解决了它: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);
                }

            }
        });

立即处理缓存数据。