我刚刚将我的后台从Boostrap 2迁移到Boostrap 3。
我的先行指令给了我一些问题。
在bootstrap v2上我有这个:
var typeaheadSettings = {
source: function (query, process) {
list = [];
return $.ajax({
minLength: 3,
item: 10,
url: "/ajax/articles/",
type: 'POST',
data : { query: query },
dataType: 'json',
success: function (result) {
var resultList = result.aaData.map(function (item) {
list[item.name + ' - ' + item.code + ' (' + item.category + ')'] = item.id;
return item.name + ' - ' + item.code + ' (' + item.category + ')';
});
return process(resultList);
}
});
},
updater: function (item) {
$("#parent").val(list[item]);
$(this).attr("placeholder",item);
}
};
现在,明确包含了Bootstrap 3和typeahead(v.9.3.3),我就是这个部分:
$(".typeahead").typeahead({
name : 'resultArticle',
remote : {
url: '/ajax/articles?query=%QUERY',
filter: function(data) {
var resultList = data.aaData.map(function (item) {
return item.name;
});
return process(resultList);
}
}
});
对json的调用没问题,但没有回复,我不知道我可以做些什么来调试/找到解决方案。
谢谢!
答案 0 :(得分:6)
首先,您可以考虑使用https://github.com/bassjobsen/Bootstrap-3-Typeahead。
您应该检查resultList
或process(resultList)
的结果是否具有以下格式:
组成数据集的各个单元称为基准。该 规范形式的数据是具有value属性和a的对象 令牌财产。 value是表示底层的字符串 datum和tokens的值是单字符串的集合 帮助typeahead.js匹配基准与给定的查询。
模仿你的/ajax/articles?query
我使用:
<?php
class names
{
var $name;
function __construct($name)
{
$this->name = $name;
}
}
$data=array();
$data['aaData'] = array();
foreach (array('kiki','dries','wolf') as $name)
{
$data['aaData'][] = new names($name);
}
echo json_encode($data);
exit;
此端点始终返回与查询无关的三个名称的列表。此列表应显示在下拉列表中。
您(已采用)的js代码:
$(".typeahead").typeahead({
name : 'resultArticle',
remote : {
url: 'search.php?query=%QUERY',
filter: function(data) {
var resultList = data.aaData.map(function (item) {
return item.name;
});
console.log(resultList);
return resultList;
},
}
});
当我运行时console.log(resultList);
给出["kiki", "dries", "wolf"]
。符合数据格式的字符串数组。
预先输入下拉列表也显示这些名称。 (不要忘记包括CSS: https://github.com/jharding/typeahead.js-bootstrap.css https://github.com/bassjobsen/typeahead.js-bootstrap-css)
请注意,您不需要return process(resultList);