JQuery UI自动完成,在DOM中加载所有数据,而不是从mysql DB中获取

时间:2014-06-11 14:17:23

标签: php jquery mysql jquery-ui autocomplete

原因:想要加速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的情况下实现呢?

1 个答案:

答案 0 :(得分:0)

您的问题是您获得的数据速度比预期慢。您受数据库返回结果的速度限制。我建议你加快速度。

  1. 对于每个请求,不要从php建立与mysql的新连接。启用数据库连接池。它可以提高性能。我不知道如何在PHP中建立连接池。 This可能有帮助。

  2. 如果可能的话,将结果缓存在php中,这样你就不会每次都点击db。

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