gpt4 book ai didi

php - 如何让 jquery 自动完成仅显示以键入的查询开头的术语

转载 作者:行者123 更新时间:2023-12-01 05:53:52 25 4
gpt4 key购买 nike

上下文

  • 我正在向搜索引擎添加自动完成功能 motherpipe.co.uk
  • 我希望它仅建议以用户输入的字母开头的术语。例如,如果用户输入“lon”,该函数应返回十个以“lon”开头的建议。
  • 我的本地数据库中有大约 50,000 个术语
  • 我已经成功地启动并运行了自动完成功能,使用了一个调用数据库 (sql) 的单独 php 脚本。

问题

我的问题是,首先,无论用户输入什么内容,都会显示数据库中的前十个列表(基于 id)。只有在用户进一步输入字母后,建议才会正确显示。

问题

如何修改 jquery 或 php 代码以确保仅返回以键入的内容开头的术语(然后仅返回基于 id 的该子集中的前十个术语。)?

HTML

<script type="text/javascript" src="/scripts/autocomplete/autocomplete/jquery.js"></script>
<script type="text/javascript" src="/scripts/autocomplete/autocomplete/jquery.autocomplete.js"></script>
<script>
$(document).ready(function(){
$("#tag").autocomplete("/scripts/autocomplete/autocomplete/autocomplete.php", {
selectFirst: false,
minChars: 2
});
});
</script>

PHP

<?php
$q=$_GET['q'];
$mydata=mysql_real_escape_string($q);
$mysqli=mysqli_connect('localhost','username','password','languages') or die("Database Error");
$sql="SELECT searchterms FROM topterms WHERE searchterms LIKE '$mydata%' ORDER by id";
$result = mysqli_query($mysqli,$sql) or die(mysqli_error());

if($result)
{
while($row=mysqli_fetch_array($result))
{
echo $row['searchterms']."\n";
}
}
?>

最佳答案

当您使用 URL 作为源时(就像您所做的那样),使用新版本的 jQuery 自动完成功能:

  1. 您必须返回 JSON 数据:

    String: When a string is used, the Autocomplete plugin expects that string to point to a URL resource that will return JSON data. It can be on the same host or on a different one (must provide JSONP).

  2. 您收到的 GET 参数是“term”,而不是“q”

    The Autocomplete plugin does not filter the results, instead a query string is added with a term field, which the server-side script should use for filtering the results.

  3. 在 PHP 中使用 mySQL 真正转义的正确方法是在建立连接后使用它,在您的情况下:

    $q = $_GET['term'];
    $mysqli = mysqli_connect('localhost','username','password','languages');
    if (!$mysqli or $mysqli->connect_error) die("Database Error");
    $mydata = $mysqli->real_escape_string($q);
    $sql = "SELECT searchterms FROM topterms WHERE searchterms LIKE '$mydata%' ORDER by id";
    $result = mysqli_query($mysqli,$sql);
    $json = array();
    if ($result and $result->num_rows > 0) {
    while($row=mysqli_fetch_array($result)) {
    $json[] = $row['searchterms'];
    }
    }
    header('Content-Type: application/json'); // You can skip that because IE doesn't really like it
    echo json_encode($json);

关于php - 如何让 jquery 自动完成仅显示以键入的查询开头的术语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18216088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com