Javascript 基于PHP的大数据集表单自动完成

Javascript 基于PHP的大数据集表单自动完成,javascript,php,html,sql,autocomplete,Javascript,Php,Html,Sql,Autocomplete,我正在开发一个web应用程序,其中SQL数据库中有大量的文本字符串(这里称为“items”)。用户应在输入表格中从这些项目中选择三项。我尝试了一些“直接”解决方案(下拉组合框等),但这些解决方案速度太慢,有50000个项目可供选择。使用JavaScript实现文本框自动完成的传统解决方案也遇到了类似的问题:具有允许选项的JavaScript文件变得太大(许多MiB) 我更希望有一个解决方案,在用户键入时,从SQL数据库动态获取剩余的可能项。例如,如果输入了前三个字母,通常只剩下几百个可能的项目。

我正在开发一个web应用程序,其中SQL数据库中有大量的文本字符串(这里称为“items”)。用户应在输入表格中从这些项目中选择三项。我尝试了一些“直接”解决方案(下拉组合框等),但这些解决方案速度太慢,有50000个项目可供选择。使用JavaScript实现文本框自动完成的传统解决方案也遇到了类似的问题:具有允许选项的JavaScript文件变得太大(许多MiB)

我更希望有一个解决方案,在用户键入时,从SQL数据库动态获取剩余的可能项。例如,如果输入了前三个字母,通常只剩下几百个可能的项目。但是,我不知道如何在用户键入时实现数据库访问(无需重新加载页面,以便执行PHP代码)


我不使用任何内容管理系统;我更喜欢不依赖庞大的第三方库的纯HTML/PHP/JavaScript/jQuery/CSS解决方案。谢谢你的建议

您需要使用php jquery和ajax

<form autocomplete="off" action="">
  <div class="autocomplete" style="width:300px;">
    <input id="myInput" type="text" name="myCountry" placeholder="Country">
    <div id="myInputautocomplete-list" class="autocomplete-items">
        //insert ajax response here
    </div>
  </div>
  <input type="submit">
</form>

onchange事件,对服务器执行AJAX调用,该服务器查询并提出匹配值。在用户输入至少3个字符(例如,可能更多)之前,不要启动此操作。这样可以避免搜索所有带有“a”的条目!话虽如此,你的问题很快就会结束。开始学习AJAX教程,进行大量研究,然后根据需要在此处发布。
* { box-sizing: border-box; }
body {
  font: 16px Arial;
}
.autocomplete {
  /*the container must be positioned relative:*/
  position: relative;
  display: inline-block;
}
input {
  border: 1px solid transparent;
  background-color: #f1f1f1;
  padding: 10px;
  font-size: 16px;
}
input[type=text] {
  background-color: #f1f1f1;
  width: 100%;
}
input[type=submit] {
  background-color: DodgerBlue;
  color: #fff;
}
.autocomplete-items {
  position: absolute;
  border: 1px solid #d4d4d4;
  border-bottom: none;
  border-top: none;
  z-index: 99;
  /*position the autocomplete items to be the same width as the container:*/
  top: 100%;
  left: 0;
  right: 0;
}
.autocomplete-items div {
  padding: 10px;
  cursor: pointer;
  background-color: #fff;
  border-bottom: 1px solid #d4d4d4;
}
.autocomplete-items div:hover {
  /*when hovering an item:*/
  background-color: #e9e9e9;
}
.autocomplete-active {
  /*when navigating through the items using the arrow keys:*/
  background-color: DodgerBlue !important;
  color: #ffffff;
}

<script>
window.addEventListener('load',function(){
        jQuery(document).ready(function($) {   
            $("#myInput").keypress(function() {  
                var inputData = $("#myInput").text('');
                if(inputData.length > 2) {
                    $.ajax({
                        url     : "/ajax.php",
                        type    : "POST",
                        data    : {'myInput': $(this).val()},
                        dataType: 'json',
                        success: function (response) {         
                            //after ajax call here you get the data
                            alert(response.data);
                            // user below divs to iterated data
                            /*
                            <div><strong>D</strong>enmark
                            <input type="hidden" value="Denmark"></div>
                            <div><strong>D</strong>jibouti
                            <input type="hidden" value="Djibouti"></div> */
                    });
                }
            });
        });
    });
</script>    
$query = "select * from tableName where itemName like $inputData%";
$res = mysql_query($query);
$data = mysql_fetch_data($res);

$result = json_encode("code":200,"data":$data)
return $result;