Javascript 基于PHP的大数据集表单自动完成
我正在开发一个web应用程序,其中SQL数据库中有大量的文本字符串(这里称为“items”)。用户应在输入表格中从这些项目中选择三项。我尝试了一些“直接”解决方案(下拉组合框等),但这些解决方案速度太慢,有50000个项目可供选择。使用JavaScript实现文本框自动完成的传统解决方案也遇到了类似的问题:具有允许选项的JavaScript文件变得太大(许多MiB) 我更希望有一个解决方案,在用户键入时,从SQL数据库动态获取剩余的可能项。例如,如果输入了前三个字母,通常只剩下几百个可能的项目。但是,我不知道如何在用户键入时实现数据库访问(无需重新加载页面,以便执行PHP代码)Javascript 基于PHP的大数据集表单自动完成,javascript,php,html,sql,autocomplete,Javascript,Php,Html,Sql,Autocomplete,我正在开发一个web应用程序,其中SQL数据库中有大量的文本字符串(这里称为“items”)。用户应在输入表格中从这些项目中选择三项。我尝试了一些“直接”解决方案(下拉组合框等),但这些解决方案速度太慢,有50000个项目可供选择。使用JavaScript实现文本框自动完成的传统解决方案也遇到了类似的问题:具有允许选项的JavaScript文件变得太大(许多MiB) 我更希望有一个解决方案,在用户键入时,从SQL数据库动态获取剩余的可能项。例如,如果输入了前三个字母,通常只剩下几百个可能的项目。
我不使用任何内容管理系统;我更喜欢不依赖庞大的第三方库的纯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;