我正在尝试使用jQuery自动填充字段来处理来自远程数据库的数据,而我没有运气。这是我到目前为止所做的尝试:
1.我拥有标题中源代码的所有必要链接。
2.我编写了以下jQuery脚本:
<script>
$(function() {
function log( message ) {
$( "<div>" ).text( message ).prependTo( "#log" );
$( "#log" ).scrollTop( 0 );
}
$( "#projNo0" ).autocomplete({ //projNo0 is the name of the autocomplete field
source: "projects.php",
minLength: 2,
select: function( event, ui ) {
log( ui.item ?
"Selected: " + ui.item.value + " aka " + ui.item.id :
"Nothing selected, input was " + this.value );
}
});
});
</script>
3.这是PHP后端,它应该填充自动完成字段projNo0(数据库连接在同一文件的其他地方处理):
$return_arr = array();
if ($con2) //If the DB connection is successful
{
//Get the user's input from projNo0
$ac_term = "%".$_GET['term']."%";
$query = $con2->prepare("SELECT CodeID FROM CodeTable WHERE
CodeID LIKE :term");
$data = array('term'=>$ac_term);
$query->execute($data);
while ($row = $query->fetch(PDO::FETCH_ASSOC))
{
$row_array['CodeID'] = $row['CodeID'];
array_push($return_arr,$row_array);
//echo $row['CodeID']; //line used for testing
//echo '<br />'; //line used for testing
}
}
4.这里是我的自动填充字段的HTML。它是数组的一部分:
<p class="ui-widget">
<input type="text" name="projNo[]" id="projNo0" value="<? php echo $projNo[0]; ?>" />
</p>
我可以确认连接到远程数据库没有问题。我能够回显出SELECT语句返回的值数组。但是,当我将一组值硬编码到其中时,jQuery脚本才有效。 (例如,将源“project.php”替换为[“Bob”,“Carol”,“Ted”,“Alice”]。)当我右键单击该字段并进行检查时,网络活动会显示该项目。正在调用php并且它正在接受我的输入,将其作为GET变量附加。该活动的状态为“OK”。但我没有得到自动填充建议的下拉列表。
我的应用程序和数据库之间的中断在哪里?我假设问题出在那里,因为脚本使用硬编码值。
答案 0 :(得分:1)
替换此
while ($row = $query->fetch(PDO::FETCH_ASSOC))
{
$row_array['CodeID'] = $row['CodeID'];
array_push($return_arr,$row_array);
//echo $row['CodeID']; //line used for testing
//echo '<br />'; //line used for testing
}
有了这个
echo json_encode(array_values($query->fetchAll(PDO::FETCH_COLUMN, 0)));
关键是 - 自动完成将JSON编码的字符串作为答案,并且您不会从脚本中返回任何内容。使用array_reduce
获取生成的数组只是我的偏好。