我使用的是引导预输入,用Ajax调用,创造一种为我的网站即时搜索的。 这是所有工作的伟大,除了那只是事先键入的内容似乎能够处理的标题,而不是HREF中的事实。 例:
我的PHP代码是这样的:
$results = mysql_query("MY SELECT QUERY GOES HERE");
$array = array();
while ($row = mysql_fetch_assoc($results)){
$array[] = $row['title'];
}
echo json_encode($array);
而我的Javascript是在这里:
$('#quickSearch').typeahead({
source: function (query, process) {
$.ajax({
url: "my_php_file.php",
type: "POST",
data: 'query=' + query,
dataType: 'JSON',
async: true,
success: function(data){
console.log(data)
process(data)
}
})
}
});
...一起,这些结果在这个HTML:
<ul class="typeahead dropdown-menu" display: block;">
<li data-value="Baltimore" class="active">
<a href="#"><span class="highlighter">B</span>altimore</a>
</li>
</ul>
该过程函数是某个内置自举,它需要每个结果的标题和填充一个下拉列表吧。 我希望能够从我的数据库获取HREF过,然后在下拉菜单中的链接将实际工作,而不是仅仅是作秀。
问题是,如果我写$array[] = array("title"=>$row['title'],"href"=>$row['link']");
在我的PHP文件,它打破了一切作为推测处理()不能处理的附加数据。
有没有人有什么建议? 在事先键入的内容更多信息可以在这里找到: http://twitter.github.com/bootstrap/javascript.html#typeahead
谢谢
您可以使用JSON格式的结果,并和定义一些选项,比如“匹配”,“分拣”,“更新”等:
PHP
$results = mysql_query("MY SELECT QUERY GOES HERE");
$array = array();
while ($row = mysql_fetch_assoc($results)){
$array[] = array("title"=>$row['title'],"href"=>$row
}
echo json_encode($array);
使用Javascript:
$('#quickSearch').typeahead({
source: function (query, process) {
$.ajax({
url: "my_php_file.php",
type: "POST",
data: 'query=' + query,
dataType: 'JSON',
async: true,
success: function(data){
var resultList = data.map(function (item) {
var link = { href: item.href, name: item.title };
return JSON.stringify(link);
});
return process(resultList);
}
})
},
matcher: function (obj) {
var item = JSON.parse(obj);
return ~item.title.toLowerCase().indexOf(this.query.toLowerCase())
},
sorter: function (items) {
var beginswith = [], caseSensitive = [], caseInsensitive = [], item;
while (link = items.shift()) {
var item = JSON.parse(link);
if (!item.title.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(JSON.stringify(item));
else if (~item.name.indexOf(this.query)) caseSensitive.push(JSON.stringify(item));
else caseInsensitive.push(JSON.stringify(item));
}
return beginswith.concat(caseSensitive, caseInsensitive)
},
highlighter: function (link) {
var item = JSON.parse(link);
var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&')
return item.title.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) {
return '<strong>' + match + '</strong>'
})
},
updater: function (link) {
var item = JSON.parse(link);
$('#quickSearch').attr('href', item.href);
return item.title;
}
});
一注为item.title仅在AJAX源机能的研究这个完美的脚本。
代码的其余部分应item.name你定义:
var link = { href: item.href, name: item.title };