【问题标题】:jQuery autocomplete field not autocompleting when getting data from remote database从远程数据库获取数据时,jQuery自动完成字段不会自动完成
【发布时间】:2014-01-17 01:38:32
【问题描述】:

我正在尝试让一个 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.这是应该填充自动完成字段 projNo0 的 PHP 后端(数据库连接在同一文件的其他地方处理):

$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 脚本才有效。 (例如,将源“projects.php”替换为 ["Bob","Carol","Ted","Alice"]。)当我右键单击该字段并检查它时,网络活动会显示该项目。 php 被调用并且它正在接受我的输入,并将其附加为 GET 变量。该活动的状态是“OK”。但我没有得到自动填充建议的下拉列表。

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

【问题讨论】:

  • 你的脚本返回什么?纯json?你是否包含了 jquery-ui css 文件?
  • 是的,ui css 文件在那里。当我在其中使用硬编码的值数组时,jQuery 脚本可以正常工作,但当我尝试从数据库中获取值时却不行。
  • 您检查过您的脚本是否正在返回某些内容?显示脚本的一些示例输出。您是否检查了客户端收到的内容?
  • 当我在 projects.php:echo json_encode(array_values($query-&gt;fetchAll(PDO::FETCH_COLUMN, 0))); 使用我自己的名字作为 :term 运行它时,我得到 ["Michael Benton"]。我的名字在数据库里,所​​以没问题。它只是没有把它交给 JQuery 脚本。

标签: javascript php jquery jquery-ui autocomplete


【解决方案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 获取结果数组只是我的偏好。

【讨论】:

  • 复制/粘贴时出现语法错误。是否缺少结束 } 或 )?无法追踪它。
  • 你用的是哪个php版本?
  • 分号结尾可能。而且我是个白痴,通常我在需要将值和标签对传递给自动完成时使用它。
  • 我们使用的是 5.3,所以没有问题。语法错误已更正,但您建议的代码并没有改变任何内容,唉。
  • 再试一次。另外,你能在你的projects.php上看到一个响应,看看里面有什么吗?
猜你喜欢
  • 1970-01-01
  • 2012-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-21
  • 2015-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多