ajaxを使用して自分のWebページにユーザー検索バーを作成しようとしています。xmlファイルを使用する代わりに、mysqlデータベースから直接値を返したい。これは、新しいユーザーがサイトに登録されるたびにxmlファイルを更新し続ける必要がないためです。私はAJAXを初めて使用し、問題に遭遇しました。現在、値をクエリにハードコーディングすると、コードは機能します。しかし、検索バーからクエリに値を取得し、値が検索バーに入力されたときにのみコードを実行するにはどうすればよいですか。これが私が持っているものです。
2つのファイルがあります。インデックス(検索バーと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コードを実行できるようにする方法は何ですか。ありがとう。