如何从 MySQL 数据库中获取数据并在 javascript 自动完成中使用?

Posted

技术标签:

【中文标题】如何从 MySQL 数据库中获取数据并在 javascript 自动完成中使用?【英文标题】:How to fetch data from MySQL database and use in a javascript autocomplete? 【发布时间】:2018-10-23 14:08:31 【问题描述】:

我正在使用 jQuery autocomplete 构建自动完成功能。为此,我在一个表中存储了 216 个行业的数据记录。我想获取该表并在 javascript 数组中用于自动完成。你可以看到我到目前为止所做的尝试,但我得到了空值。我的问题是如何从数据库中获取数据并使其成为可以在 javascript 数组中用于自动完成的数组?

表格

id | industryName
1  | Air Transport
2  | Agriculture
...

autocomplete.php

<div class="ui-widget">
  <label for="industries">Industries: </label>
  <input id="industries">
</div>

<script>
        $.ajax(
           url : 'industries.php',
           type : 'GET',
           success : function(data)
              var availableIndustries = jQuery.parseJSON(data);

        $( function() 
        $( "#industries" ).autocomplete(
          source: availableIndustries
        );
       );
           
        );
</script>

industries.php

include 'includes/database.php';

 $sql = "SELECT * FROM industries";
 $result= $conn->query($sql);
 echo json_encode($result);

【问题讨论】:

错误是什么? 你还记得实际包含 jQuery 和 jQueryUI 吗? 应该是source: 'industries.php', here's an example @Richard :这是我在运行 industries.php 时看到的:"current_field":null,"field_count":null,"lengths":null,"num_rows":null,"type":null @ObsidianAge:刚刚验证过,是的,一切都在那里。我在日历的不同页面上使用 jquery,它工作正常。 【参考方案1】:

你的命名对吗?例子是错误的..

另外,在echo json_encode($result); 之后添加和exit;

【讨论】:

这是一个拼写错误。对不起。我试图用一个while语句来显示它并且它有效。所以json不能正常工作。 所以您使用的是GET,当您直接浏览该网址时会看到什么? 你的意思是当我输入 localhost/myProject/industries.php 时?如果有while($data = mysqli_fetch_array($result)) echo $data['Industry']; json_encode($result) 的while 语句,我会看到所有记录,我看到"current_field":null,"field_count":null,"lengths":null,"num_rows":null,"type":null 。否则它是一个空白页。【参考方案2】:

我找到了适合我的解决方案。

autocomplete.php

<div class="ui-widget">
  <label for="industries">Industries: </label>
  <input id="industries">
</div>

<script>
var validOptions = <?=$json_array?>;
previousValue = "";

$('#industries').autocomplete(
    autoFocus: true,
    source: validOptions
).keyup(function() 
    var isValid = false;
    for (i in validOptions) 
        if (validOptions[i].toLowerCase().match(this.value.toLowerCase())) 
            isValid = true;
        
    
    if (!isValid) 
        this.value = previousValue
     else 
        previousValue = this.value;
    
);
</script>

industries.php

//bind to $name
if ($stmt = $conn->prepare("SELECT Industry FROM industries")) 
    $stmt->bind_result($name);
    $OK = $stmt->execute();

//put all of the resulting names into a PHP array
$result_array = Array();
while($stmt->fetch()) 
    $result_array[] = $name;

//convert the PHP array into JSON format, so it works with javascript
$json_array = json_encode($result_array);

【讨论】:

以上是关于如何从 MySQL 数据库中获取数据并在 javascript 自动完成中使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PHP 和 Smarty 同时获取数据并在浏览器中显示?

从mysql中提取数据并在javascript中使用它们

从 Postcode DB 获取 lat/lng 并在 PHP/MYSQL 中按最近的顺序排序

从mysql获取数据并在几周内对它们进行分组,并显示日期

如何在 mysql 中选择多个相同数据之一并在 jComboBox java 中查看?

如何从 SQLite 数据库中获取数据并在 EditText 中显示