0

我正在尝试使用 ajax 在我的网页上创建一个用户搜索栏。我想直接从我的 mysql 数据库返回值,而不是使用 xml 文件。这是因为我不想每次在网站上注册新用户时都必须不断更新我的 xml 文件。我是 AJAX 的新手,遇到了障碍。现在,如果我将值硬编码到查询中,我的代码就可以工作。但是如何从搜索栏中获取值到查询中,并使代码仅在搜索栏中输入值时运行。这就是我所拥有的。

我有两个文件,索引(搜索栏和 php 代码所在的位置),然后是 ajax 代码的 javascript 文件。

搜索条码:

            <form method="post" name="searchForm">
                <input type="text" size="40" placeholder="Search for people" onkeyup="getResults(this.value)" />
                <div id="search">
                    <?php
                        $searchString = $_POST['str'];  
                        $sql = "SELECT name FROM User WHERE name LIKE '?%'";
                        $query = $conn->prepare($sql);
                        $query->execute(array($searchString));
                        $row = $query->fetchAll();
                        echo "<ul>";
                        foreach ($row as $rs) 
                        {
                            echo "<li><a href='#'>" . $rs['name'] . "</a></li>";
                        }
                        echo "</ul>";
                    ?>
                </div>
            </form>

Javascript/AJAX 代码:

function getResults(str)
{
    if (str.length == 0)
    { 
        document.getElementById("search").innerHTML="";
        document.getElementById("search").style.border="0px";
        return;
    }
    if (window.XMLHttpRequest)
    {
        // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else
    {   
        // code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            document.getElementById("search").innerHTML = xmlhttp.responseText;
            document.getElementById("search").style.border="1px solid #A5ACB2";
        }
    }
    xmlhttp.open("POST","index.php?str="+str,true);
    xmlhttp.send();
}

我在这里做错了什么?除了使用提交按钮之外,还有什么方法可以让我只在用户开始在搜索栏中输入时运行 php 代码。谢谢。

4

2 回答 2

0

首先,将实际页面(呈现 HTML 的 PHP 脚本)和返回实际搜索结果的代码分开。目前,您<input>在页面呈现时执行的 PHP 代码永远不会知道用户在您的搜索框中输入了什么。

您的搜索脚本应返回 JSON 或 XML。目前,它使用完整的 HTML 加载为用户设计的页面。这只是对资源和带宽的浪费。

为了修正您的 SQL 语句,该?字符必须代表您的LIKE表达式的整个术语。
例子:

$searchString = $_POST['str'] . '%';
$sql = "SELECT name FROM User WHERE name LIKE ?";
$query = $conn->prepare($sql);
$query->execute(array($searchString));

还有更多的东西需要修复,但这应该可以帮助你从哪里开始......

于 2012-07-12T18:23:41.200 回答
0

您需要检查是否确实发生了 POST - 有人第一次点击您的页面时很可能是通过 GET,但无论如何您的搜索代码都会运行。所以...

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
   if (isset($_POST['str']) && ($_POST['str'] != '')) {
       ... run the search
   }
}
于 2012-07-12T18:30:56.123 回答