从远程数据库获取数据时,jQuery自动完成字段不自动完成

时间:2014-01-16 17:04:36

标签: javascript php jquery jquery-ui autocomplete

我正在尝试使用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”。但我没有得到自动填充建议的下拉列表。

我的应用程序和数据库之间的中断在哪里?我假设问题出在那里,因为脚本使用硬编码值。

1 个答案:

答案 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获取生成的数组只是我的偏好。