这是Mysql DB connection.php
<?php
$conn = new mysqli("localhost", 'root', "", "laravel");
$query = mysqli_query($conn,"select * from customers");
while ($result2=mysqli_fetch_assoc($query)) {
$data[] = $result2['customername'];
}
echo json_encode($data);
?>
json没有响应onKeyup或keydown它正在显示整个输出。但我想只显示当前相关的匹配名称才能显示。我是json和ajax的新手。我认为ajax和json的反应都是一样的。
<form action="">
First name: <input type="text" id="txt1" onkeyup="showHint(this.value)">
</form>
<p>Suggestions: <span id="txtHint"></span></p>
<script>
function showHint(str) {
var xhttp;
if (str.length == 0) {
document.getElementById("txtHint").innerHTML = "";
return;
}
xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && xhttp.status == 200) {
document.getElementById("txtHint").innerHTML = xhttp.responseText;
}
};
xhttp.open("GET", "connection.php?q="+str, true);
xhttp.send();
}
</script>
感谢您的建议。欢迎提出所有建议。
如何在keyup或keydown上传递表单和响应以及相关建议customername应该显示下来。我是JSON和javascript以及示例网站的新手。提前致谢。欢迎提出所有建议。
答案 0 :(得分:0)
你有几个选择;
一个是你通过在"WHERE name LIKE %" . $input . "%'";
中将文本框输入附加到SQL查询中来重新拉取ajax调用中的所有数据,但这对于网络流量的速度而言将是昂贵的。
另一个选项和我选择的选项是,如你所做的那样在SELECT中获取所有名称,然后在javascript中使用RegEx来过滤显示的结果。
这是使用正则表达式的一个很好的链接。 https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions
编辑: 这些都没有经过测试,因为我现在没有办法测试。
对于第一个示例,我将假设您通过GET传递查询,因此在您的PHP文件中,您将代码更改为:
<?php
// Your DB connection
$conn = new mysqli("localhost", 'root', "", "laravel");
// Initialise the query string
$qString = "SELECT * FROM customers";
// Providing a parameter is sent in the GET request to the PHP page, look for names
// containing that string
isset($_GET['q']) ? $qString .= " WHERE customername LIKE '%" . $_GET['q'] . "%'" : "";
$qHandler = mysqli_query($conn, $qString);
while ($qResult = mysqli_fetch_assoc($qHandler)) {
$data[] = $qResult['customername'];
}
echo json_encode($data);
?>
因此,当通过调用showHint(str)发出请求时,它会将str附加到查询中,例如&#39;声明,带有%%通配符。所以你把'艺术&#39;在文本框中,它将返回诸如&#39; bART&#39;,&#39; marther&#39;等名称。