我正在尝试使用 jQuery 自动完成功能来搜索活动列表。 用户应在文本框中输入某个活动的几个字母,例如“ai”,自动完成功能应在下面弹出包含这些字母的活动列表,例如“合气道”、“模型飞机”等。活动列表存储在服务器上的 mysql 数据库中,我调用 php 脚本来获取活动列表并将其传递给 jQuery 自动完成函数。 然而,出于某种奇怪的原因,自动完成功能当前在下面的下拉框中列出了所有活动,无论它们是否包含用户输入的文本。
这是我的 HTML:
<label for="activity">Select Activity:</label>
<input id="activity">
这是我的Javascript:
$( "#activity" ).autocomplete({
source: "php/getActivities.php"
});
这是我的 php 文件:
<?php // CreateAdForm.php
// Connect to database
include_once 'dbConnect.php';
$activities = array();
$query = "SELECT activity FROM activities WHERE listed=true";
$resource = mysql_query($query);
// Push all these activities onto the array
while($row = mysql_fetch_row($resource)) {
array_push($activities, $row[0]);
} // end of loop through activities
// Return the activities
echo json_encode($activities);
?>
我认为问题在于“echo json_encode($activities);” php 文件中的行。 我想我应该以不同的格式回显 JSON 数据。 我只是不太确定什么格式。
感谢您的帮助,
汤姆
我认为你需要在 SQL 中添加一个条件来按搜索词过滤结果。尝试在您的 PHP 脚本中执行此操作:
<?php // CreateAdForm.php
// Connect to database
include_once 'dbConnect.php';
// Search term
$term = $_GET['term']; /////
$activities = array();
$query = "SELECT activity FROM activities WHERE listed=true AND activity LIKE '%" . $term . "%'";
$resource = mysql_query($query);
// Push all these activities onto the array
while($row = mysql_fetch_row($resource)) {
array_push($activities, $row[0]);
} // end of loop through activities
// Return the activities
echo json_encode($activities);
?>
尝试将 minLength 选项添加到自动完成中
$( "#activity" ).autocomplete({
minLength: 2,
source: "php/getActivities.php"
});