我正在尝试使用带有symfony 2.7的typeahead来使用LIKE进行数据库搜索。我已经阅读了typeahead的文档,并根据他们网站上的示例,我提供了一个小例子,看看它是如何工作的。由于我在执行搜索的表中有大约1300个条目,因此我生成了一个包含所有性能条目的json文件。 问题是,typeahead没有显示来自远程或预取的任何信息,我不明白为什么它不起作用,因为我没有对示例中的原始代码进行太多更改。目前生成的结果包含来自示例页面的虚拟数据,因为我认为从远程返回的结果有问题。也许我错过了什么,我看不到解决方案。 我检查了控制台,我没有收到任何错误,在打字之前加载了bloodhound,两者都被正确加载并且js文件在它们之后加载并显示内容。
Javascript文件:
var url = Routing.generate('ajax_search', {name: 'query'});
// Trigger typeahead + bloodhound
var products = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
prefetch: '/json/result.json',
remote: {
url: url,
wildcard: 'query'
}
});
products.initialize();
$('#products_forms .typeahead').typeahead({
name: 'product',
displayKey: 'value',
source: products.ttAdapter()
});
html测试文件
{% extends '::base.html.twig' %}
{% block body %}
<div class="col-sm-10" id="product">
<input type="text" placeholder="Product" id="product" name="product" class="form-control typeahead">
</div>
{% endblock %}
从php生成的虚拟文件
cat result.json
{"stateCode": "CA", "stateName": "California"},
{"stateCode": "AZ", "stateName": "Arizona"},
{"stateCode": "NY", "stateName": "New York"},
{"stateCode": "NV", "stateName": "Nevada"},
{"stateCode": "OH", "stateName": "Ohio"}
答案 0 :(得分:0)
似乎是这样的:
的javascript:
$(document).ready(function() {
var url = Routing.generate('ajax_search', {name: 'WILDCARD'});
// Trigger typeahead + bloodhound
var products = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
identify: function(obj) { return obj.team; },
prefetch: 'json/result.json',
remote: {
url: url,
wildcard: 'WILDCARD',
}
});
products.initialize();
$('#products_forms .typeahead').typeahead({
minLength: 3,
highlight: true
},
{
name: 'product',
display: 'team',
source: products.ttAdapter()
});
});