【发布时间】:2013-12-26 06:23:29
【问题描述】:
我正在尝试使用带有 typeahead.js 的 bootstrap v3.0.0 实现搜索栏下拉菜单。 我的搜索栏将采用学生的名字和姓氏。我正在使用一个 MYSQL 数据库,它由一个名为 practice 的表组成,其中 afirstname、alastname、aid 作为列。搜索栏不仅应包含下拉列表中的名字和姓氏,还应在第二行中包含与其关联的 id。我已经阅读了 typeahead.js 页面上的所有示例,但我无法通过 ajax 调用来做到这一点。
下面是我的index.php
JS
<script type="text/javascript">
$(document).ready(function() {
$('.cr.typeahead').typeahead({
source: header: '<h3>Select</h3>',
name: 'accounts',
source: function (query, process) {
return $.getJSON(
'localhost/resultly/source.php',
{ query: query },
function (data) {
return process(data);
});
});
});
</script>
HTML:
<body>
<div class="container">
<br/><br/>
<input type="text" name="query" class="form-control cr typeahead" id="firstname" />
<br/><br/>
</div>
</body>
source.php 的代码:这应该以 json 字符串或对象的形式从我的数据库中返回名字和姓氏?
<?php
$query = $_POST['query'];
try {
$conn = new PDO('mysql:host=localhost;dbname=practice','root','');
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("SELECT * FROM actualtable WHERE afirstname LIKE '%($query)%'");
$stmt->execute();
}
catch (PDOException $e) {
echo 'ERROR:' . $e->getMessage();
}
foreach ($stmt as $row) {
$afirstname[] = $row['afirstname'];
$alastname[] = $row['alastname'];
}
echo json_encode($afirstname);
echo json_encode($alastname);
?>
结果: http://oi41.tinypic.com/50moi1.jpg
什么都没有出现。我试过添加prefetch:
prefetch: {
url: 'localhost/resultly/source.php',
filter: function(data) {
r1 = [];
for (var i = 0; i < data.length; i++) {
r1.push({
value: data[i].afirstname,
tokens: [data[i].afirstname, data[i]alastname],
afirstname: data[i].afirstname,
alastname: data[i].alastname,
template: '<p>{{afirstname}} - {{alastname}}</p>',
});
}
return r1;
}
}
请提供我可以参考的解决方案或示例。
更新:
source.php 应该返回一个 json 编码数据的列表。我通过查看 source.pho 创建的输出进行了调试。我做错的是每当我应该输入一个网址时,我做了localhost/source.php 而不仅仅是source.php。
Bass Jobsen 提供的解决方案有效,现在我遇到了另一个问题。
我正在使用
if(isset($_POST['query']))
{ $q_uery = $_POST['query'];
$query = ucfirst(strtolower($q_uery))};
获取用户的数据并将其用于搜索逻辑
$stmt = $conn->prepare("SELECT * FROM actualtable WHERE afirstname LIKE '%($query)%'");
更新后的source.php为http://pastebin.com/T9Q4m10g
我在这一行收到一条错误消息 Notice: Undefined variable: stmt I guess the $query is not being initialized。我怎样才能让它工作。谢谢。
更新 3
我使用了 prefetch: 而不是 'remote:' 来完成所有的匹配。
【问题讨论】:
标签: ajax twitter-bootstrap-3 bootstrap-typeahead typeahead typeahead.js