如何获取数据并传递。进入表单和响应customername onkeyup或keydown json和php

时间:2016-07-04 16:05:48

标签: php json ajax

这是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以及示例网站的新手。提前致谢。欢迎提出所有建议。

1 个答案:

答案 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;等名称。