"未定义"使用Typeahead返回

时间:2014-04-29 14:03:34

标签: jquery json typeahead.js

我正在使用Typeahead在Symfony2中为我的应用构建自动完成功能。当文本输入到文本区域时,会返回建议,但它们都显示为"未定义"。

JSON输出如下:

[{"name":"Test"},{"name":"Something"},{"name":"Another thing"},{"name":"Time"}]

我的HTML& JQuery是这样的:

<h1>Ajax Test</h1>
<div id="prefetch">
    <input class="typeahead" type="text" placeholder="Countries">
</div>
<script>
    var countries = new Bloodhound({
    datumTokenizer: Bloodhound.tokenizers.obj.whitespace('name'),
    queryTokenizer: Bloodhound.tokenizers.whitespace,
    limit: 10,
    prefetch: {
    url: 'http://localhost/centredb/web/app_dev.php/centre/dashboard/ajax/centres/',
    filter: function(response){
        return response.Name
    }
    }
    });

    // kicks off the loading/processing of `local` and `prefetch`
    countries.initialize();

    // passing in `null` for the `options` arguments will result in the default
    // options being used
    $('#prefetch .typeahead').typeahead(null, {
    name: 'countries',
    displayKey: 'name',
    // `ttAdapter` wraps the suggestion engine in an adapter that
    // is compatible with the typeahead jQuery plugin
    source: countries.ttAdapter()
    });
</script>

修改
看了很多例子后,JSON输出是正确的,所以我删除了对Symfony2的引用。这是使用JSON输出的Typeahead的严重问题。

1 个答案:

答案 0 :(得分:0)

您需要更改过滤器功能,以便返回基准数组(即建议)。一个datum is a javascript object所以你需要使用过滤函数生成一个javascript对象数组。

你可以这样做:

filter: function (centres) {
 return $.map(centres, function (centre) {
  return {
   name: centre.name
  };
 });
}

可以在这里找到类似的例子:

http://jsfiddle.net/Fresh/e7qM9/