如何为jQuery自动完成调用MySQL源数据?

时间:2011-11-20 16:44:38

标签: php jquery jquery-ui jquery-ui-autocomplete

我正在使用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";         
}

3 个答案:

答案 0 :(得分:1)

最好的方法是减少服务器端的可能选项:

$sth = $dbh->query ("SELECT * FROM constants 
                     WHERE category='Colors' and value like '.".$_GET['term']."%'
                     ORDER BY display");

($ _GET ['term']替换为针对sql注入检查的字符串..)

请参阅:http://docs.jquery.com/UI/Autocomplete

答案 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"; ?>

这应该会奏效。