gpt4 book ai didi

php - JQuery UI 自动完成,将所有数据加载到 DOM 中而不是从 mysql 数据库中获取

转载 作者:行者123 更新时间:2023-11-30 23:00:44 24 4
gpt4 key购买 nike

原因:想加速自动完成结果

我有什么:我有两个输入框。一个是类别,另一个是品种。首先我选择类别,

$("#category").autocomplete({
autoFocus: true,
source: function(request, response) {
$.getJSON("./php/autocompletenontex_getcategory.php", { category: request.term }, response);
},
minLength: 0,
select: function( event, ui ) {
$('#variety').focus();
}
}).focus(function() {
$(this).autocomplete("search", "");
});

上面的代码在开始输入之前显示了自动完成结果。

我的 PHP 代码是://包括数据库连接之后

$category =  $_REQUEST["category"];
$sql = "SELECT distinct(category) FROM master_nontextile WHERE category LIKE '%".$category."%'";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result)){
$results[] = array('label' => $row['category'], 'value' => $row['category']);
}
echo json_encode($results);

下一个输入字段是 Variety - variety 自动完成结果基于类别的选择。代码如下

$("#variety").autocomplete({
autoFocus: true,
source: function(request, response) {
$.getJSON("./php/autocompletenontex_getvariety.php", { variety: request.term, category: $("#category").val() }, response);
},
minLength: 0,
select: function( event, ui ) {
$('#variety').val(ui.item.variety);
$('#price').val(ui.item.price);
$('#quantity').focus();
}
}).focus(function() {
$(this).autocomplete("search", "");
});

对应的PHP是:

//after including DB connection
$stmt = $pdo->prepare("SELECT variety, price FROM master_nontextile WHERE category = '$category' AND ( variety LIKE '%".$variety."%' OR price ='$variety' ) ORDER BY variety ASC"); $stmt->execute();
while($row = $stmt->fetch()){
$results[] = array('label' => $row['variety'].' - '.$row['price'], 'value' => $row['variety'], 'price' => $row['price']);
}
echo json_encode($results);

问题:我们有一个计费应用程序。在品种字段中,他们可以输入品种名称或价格。 在键入时,自动完成结果会在 1 秒后显示结果(客户觉得这太晚了)。所以我需要它在输入价格或品种名称时快速填充。我认为建立联系需要时间,然后退休也需要时间。

我开始知道我们可以使用 ajax 请求在页面加载时加载数据 link here此解决方案适用于一个独立的自动完成字段。但是我有两个输入字段,第二个的结果取决于第一个。那么我怎样才能在不使用 DB 的情况下实现它呢?

最佳答案

您的问题是获取数据的速度比您预期的要慢。您受到数据库返回结果的速度的限制。我可以建议你跟随以加快速度。

  1. 不要为每个请求从 php 建立到 mysql 的新连接。启用数据库连接池。它大大提高了性能。我不知道如何在 php 中做连接池。 This可能会有帮助。

  2. 如果可能,将结果缓存在 php 中,这样您就不会每次都访问数据库。

  3. 使用外部服务为自动完成提供数据。看Autocomplete as a Service

关于php - JQuery UI 自动完成,将所有数据加载到 DOM 中而不是从 mysql 数据库中获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24165271/

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