基于自动完成值的动态下拉列表

时间:2014-10-24 09:35:01

标签: javascript php jquery drop-down-menu autocomplete

我正在尝试根据用户在上一个文本框中插入的值(自动完成)填充动态下拉列表。因此,当用户在自动完成文本框中插入演员/女演员名称时,下拉列表将由该演员演奏的电影列表填充。

问题:

有人可以告诉我这段代码的问题是什么,为什么会填充一个空的下拉列表?

这是html / js代码:

<html>
<?php
print_r($_POST);
?>
<head>
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.1/themes/base/minified/jquery-ui.min.css" type="text/css" /> 
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script type="text/javascript" src="http://code.jquery.com/ui/1.10.1/jquery-ui.min.js"></script>
</head>

<body>
Source:
<input type="textbox" name= "tag" id="tags">
<select id="movieImdbId" name="movieImdbId[]" multiple="multiple" width="200px" size="10px" style=display:none;>
</select>

<script type="text/javascript">
$(document).ready(function () {
$("#tags").autocomplete({
            source: "actorsauto.php",
            minLength: 2,
            select: function (event, ui){

               $("#tags").change(function () {
                   var selectedVal = $(this).val(); //this will be your selected value from autocomplete
                   // Here goes your ajax call.      
                   $.post("actions.php", {q: selectedVal}, function (response){
                // response variable above will contain the option tags. Simply put in the dropdown.   
                       $("#movieImdbId").html(response).show();
                   });
               });
              }
            });
         });
</script>   
</body>
</html>

这是 actions.php 代码:

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

if(isset($_POST['q']) && !empty($_POST['q'])){
   $q = $_POST['q'];
   $html = "";

   try{ 
      $conn = new PDO('mysql:host=localhost;dbname=imdb;charset=utf8mb4','user','pass');
      $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      $conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
      $sql = $conn->prepare("SELECT DISTINCT movieImdbId FROM movie_roleNames WHERE castName = :q");
      $sql->execute(array(':q' => $_POST['q']));

      while($rows = $sql->fetch(PDO::FETCH_OBJ)){
          $option = '<option value="' . $rows['movieImdbId'] . '">' . $rows['movieImdbId'] . '</option>';
        }
       $html .= $option;
    } catch(PDOException $e){
           echo 'ERROR: ' . $e->getMessage();
       }

  echo $html; // <-- this $html will end up receiving inside that `response` variable in the `$.post` ajax call.
   exit;
}
?>

如果有人可以帮我修复它,我真的很感激。

感谢。

1 个答案:

答案 0 :(得分:0)

您通过POST致电

$.post("actions.php")

但检查GET变量

if(isset($_GET['q']) && !empty($_GET['q']))

所以我猜你的php脚本提供了一个空字符串。 将响应打印到控制台,看看是否得到了结果。