【问题标题】:How to cache the results in the simple autocomplete如何在简单的自动完成中缓存结果
【发布时间】:2018-05-05 14:40:37
【问题描述】:

我正在编写一个简单的 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;                                 

【问题讨论】:

    标签: javascript ajax merge autocomplete unique


    【解决方案1】:

    呃,试试试试,终于解决了: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);
                    }
    
                }
            });
    

    现在正在处理缓存数据。

    【讨论】:

      猜你喜欢
      • 2020-10-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-08
      • 1970-01-01
      • 2011-09-08
      • 1970-01-01
      • 2013-10-09
      • 2014-01-19
      相关资源
      最近更新 更多