我正在使用jQuery自动完成,并希望有一个单独的PHP文件来存放数据,而不是创建一个变量(即var availableTags = [“Red”,“Orange”,“Yellow”,“Green”,Blue “])。
但是,执行此操作时,自动填充功能将持续显示所有可用选项,而不会过滤掉用户键入的内容。
有什么想法吗?
使用Javascript:
$(document).ready(function() {
$( ".autocomplete" ).autocomplete({
source: "../../db/autocomplete_list.php"
});
});
autocomplete_list.php
require_once('../includes/connect.php');
$dbh = connect(DB_HOST,DB_USER,DB_PASSWORD,CM_DATABASE);
$colors = '[';
$sth = $dbh->query ("SELECT * FROM constants
WHERE category='Colors'
ORDER BY display");
while ($row = $sth->fetch ()) {
$colors.= '"'.$row[value].'", ';
}
$colors = rtrim($colors, ', ');
$colors .= ']';
print $colors;
执行autocomplete_list.php
[“红色”,“橙色”,“黄色”,“绿色”,“蓝色”]
已将我的autocomplete_list.php文件更新为以下内容。但是,现在自动完成功能未显示我的值。如果我在FireBug中检查响应,它会正确显示结果,只是看起来它们没有被传递回自动完成。
require_once('../includes/connect.php');
$dbh = connect(DB_HOST,DB_USER,DB_PASSWORD,CM_DATABASE);
if(isset($_GET['term'])) {
$mysearchString = $_GET['term'];
}
$sth = $dbh->query("SELECT category, value, display FROM constants
WHERE category = 'COLORS' AND value LIKE '$mysearchString%'
ORDER BY display");
while ($row = $sth->fetch ()) {
print $row['display']."\n";
}
答案 0 :(得分:1)
最好的方法是减少服务器端的可能选项:
$sth = $dbh->query ("SELECT * FROM constants
WHERE category='Colors' and value like '.".$_GET['term']."%'
ORDER BY display");
($ _GET ['term']替换为针对sql注入检查的字符串..)
答案 1 :(得分:1)
在这里找到解决方案:
http://www.jensbits.com/2010/03/29/jquery-ui-autocomplete-widget-with-php-and-mysql/
require_once('../includes/connect.php');
$dbh = connect(DB_HOST,DB_USER,DB_PASSWORD,CM_DATABASE);
$return_arr = array();
if(isset($_GET['term'])) {
$mysearchString = $_GET['term'];
}
$sth = $dbh->query("SELECT category, value, display FROM constants
WHERE category = 'COLORS' AND value LIKE '$mysearchString%'
ORDER BY display");
while ($row = $sth->fetch PDO::FETCH_ASSOC()) {
$row_array = $row['display'];
array_push($return_arr,$row_array);
}
echo json_encode($return_arr);
答案 2 :(得分:0)
source
属性需要一个值数组,而不是字符串。尝试直接在脚本上回显“autocomplete list.php”的内容,如下所示:
source: <?php include "../../db/autocomplete_list.php"; ?>
这应该会奏效。