代码之家  ›  专栏  ›  技术社区  ›  archvist

typeahead result population返回整个数组对象

  •  0
  • archvist  · 技术社区  · 5 年前

    我正在使用twitter typeahead javascript库预先填充一个搜索词,以帮助用户搜索特定的名称。我用他们的例子 substringMatcher 可以找到的函数 here .

    我正在使用ajax调用填充数据,该调用返回我期望的数据。然后将此数组传递给该示例 子字符串匹配器 但是,在搜索时,函数返回整个数组而不是每个单独的项(参见图)。

    它应该只返回单个名称,而不是数组!

    enter image description here

    这是我的打字功能&source;

    $('input#practition-typeahead').typeahead({
        hint: true,
        highlight: true,
        minLength: 3,
    },{
        name: 'output',
        source: substringMatcher(
            jQuery.ajax({
                type: "POST",
                url: "/wp-admin/admin-ajax.php",
                dataType: "json",
                data: {
                    action: 'get_all_practitioners'
                },
                success:function(output){       
                    return output;
                }
            })
        )
    }); 
    

    我的子串匹配函数

    var substringMatcher = function(strs) {
      return function findMatches(q, cb) {
        var matches, substringRegex;
        // an array that will be populated with substring matches
        matches = [];
        // regex used to determine if a string contains the substring `q`
        substrRegex = new RegExp(q, 'i');
    
        // iterate through the pool of strings and for any string that
        // contains the substring `q`, add it to the `matches` array
        $.each(strs, function(i, str) {
          if (substrRegex.test(str)) {
            matches.push(str);
          }
        });
        cb(matches);
      }; 
    };
    

    编辑- 当我 console.log 我的 output success 关于我的阿贾克斯我得到了以下信息;

    success:function(output){
        console.log(output);        
        return output;
    }
    

    enter image description here

    0 回复  |  直到 5 年前
        1
  •  2
  •   archvist    5 年前

    我已经通过延迟typeahead实例直到ajax调用完成来解决了这个问题。完整的代码可以在下面找到;

    var output = [];
    jQuery.ajax({
        type: "POST",
        url: "/wp-admin/admin-ajax.php",
        dataType: "json",
        data: {
            action: 'get_all_practitioners'
        },
        success:function(output){
            console.log(output);        
            return output;
        }
    }).done(function(output){
        $('input#practition-typeahead').typeahead({
            hint: true,
            highlight: true,
            minLength: 1,
        },{
            name: 'output',
            source: substringMatcher(
                output
            )
        }); 
    });