首页 > 解决方案 > Jquery自动完成功能不会自动完成PHP,Mysql数据

问题描述

我正在尝试使用 JQuery 创建自动完成搜索功能,但未显示结果。在浏览器控制台中,我可以看到请求正在运行:

<code>在此输入图片说明</code>

这是我的搜索功能

public function getAllartikelSearch()
{
    $statement = $this->connection->prepare("SELECT * FROM lievers_serienummers.artikel where artikelNummer like :keyword");
    $statement->bindValue('keyword', '%' . $_GET['term'] . '%');
    $statement->execute();
    $result = array();
    while($product = $statement->fetch(PDO::FETCH_OBJ)) {
        array_push($result, $product->artikelNummer);
    }
    echo json_encode($result);
}

这被 search.php 调用

<?php
require_once 'database.php';
require_once 'autoloader.php';

$overzichtmanager = new overzichtmanager();
$overzichtmanager->getAllartikelSearch();
?>

这是自动完成代码:

<script>
    $(document).ready(function () {
        $('#tags').autocomplete({
            source: 'search.php'
        });
    });
</script>

<body>

<header>
    <h1>Toevoegen</h1>
</header>
<div class="ui-widget">
    <label for="tags">Tags: </label>
    <input id="tags" name="term"/>
    <div id="countryList"></div>
</div>

标签: phpjquerymysqljquery-ui-autocomplete

解决方案


您不应该使用echofrom 方法,只能使用return. 你不应该输出任何东西,除了你的控制器逻辑。还要避免在方法中使用全局变量,而是将值作为参数传递。fetchAll()同样,当您可以使用 PDO 的功能时,不需要循环。

public function getAllartikelSearch($term)
{
    $sql = "SELECT artikelNummer FROM artikel where artikelNummer like :keyword";
    $statement = $this->connection->prepare($sql);
    $statement->execute(["keyword" => "%$term%"]);
    $result = $statement->fetchAll(PDO::FETCH_COLUMN, 0);
    return json_encode($result);
}

现在 search.php 看起来像这样,设置正确的标头并将 JSON 输出到脚本。不要关闭 PHP 代码,除非您在同一文件中的后面有 HTML。

<?php
require_once 'database.php';
require_once 'autoloader.php';

$overzichtmanager = new overzichtmanager();
$json = $overzichtmanager->getAllartikelSearch($_GET["term"]);
header("Content-Type: application/json");
echo $json;

试一试,它应该工作得很好。我怀疑缺少标头会导致问题,或者可能在 JSON 之前或之后输出其他数据。如果问题仍然存在,请检查浏览器中的 JS 控制台是否有错误消息并编辑您的问题以包含它们。


推荐阅读