原因:想要加速autocoplete结果
我有什么:我有两个输入框。一个是Category,另一个是Variety。首先我选择分类,
$("#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").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的情况下实现呢?
答案 0 :(得分:0)
您的问题是您获得的数据速度比预期慢。您受数据库返回结果的速度限制。我建议你加快速度。
对于每个请求,不要从php建立与mysql的新连接。启用数据库连接池。它可以提高性能。我不知道如何在PHP中建立连接池。 This可能有帮助。
如果可能的话,将结果缓存在php中,这样你就不会每次都点击db。
使用外部服务为自动填充提供数据。查看Autocomplete as a Service