У меня есть следующее
<form action="" method="post">
<input type="text" class="auto" name="search" autocomplete="off">
</form>
<script>
$(document).ready(function($){
$('.auto').autocomplete({
source:'connect.php',
minLength:1
});
});
</script>
И connect.php
Я ЗНАЮ, что мне нужно очистить $ term перед тем, как вводить его в свой запрос.
if(isset($_GET['term'])) {
require "db.php";
$con = mysqli_connect("$host","$user","$password","$db");
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$term = $_GET['term'];
$query = "SELECT `name` FROM `products` WHERE `name` LIKE '%$term%'";
$result = mysqli_query($con, $query);
while ($row = mysqli_fetch_array($result)) {
echo json_encode($row);
}
}
Если бы я напечатал M
в поле ввода и использовать инструменты Chrome для проверки ответа, я получаю это.
{«0»: «13-дюймовый MacBook Pro», «name»: «13-дюймовый MacBook Pro»} {«0»: «MacBook
Pro 15-inch «,» name «:» MacBook Pro 15-inch «} {» 0 «:» MacBook Air
13 дюймов «,» name «:» MacBook Air 13 дюймов «} {» 0 «:» MacBook Air
11-дюймовый «,» имя «:» 11-дюймовый MacBook Air «} {» 0 «:» iMac
21,5 дюйма «,» name «:» iMac 21,5 дюйма «} {» 0 «:» iMac 27 дюймов «,» name «:» iMac 27 дюймов «} {» 0 «:» Четырехъядерный процессор Mac Pro «,» name «:» Mac Pro Quad-Core «} {» 0 «:» Mac
Pro 6-Core «,» name «:» Mac Pro 6-Core «}
Однако, по какой-то причине, на странице написано «Результаты не найдены», хотя они есть?
Выходные данные, которые создает ваш php-скрипт, не являются допустимыми json — вы должны обернуть отдельные объекты в массив:
[{"0":"MacBook Pro 13-inch","name":"MacBook Pro 13-inch"}, {"0":"MacBook Pro 15-inch","name":"MacBook Pro 15-inch"}, {"0":"MacBook Air 13-inch","name":"MacBook Air 13-inch"}, {"0":"MacBook Air 11-inch","name":"MacBook Air 11-inch"}, {"0":"iMac 21.5-inch","name":"iMac 21.5-inch"}, {"0":"iMac 27-inch","name":"iMac 27-inch"}, {"0":"Mac Pro Quad-Core","name":"Mac Pro Quad-Core"}, {"0":"Mac Pro 6-Core","name":"Mac Pro 6-Core"}]
Измените ваш PHP-скрипт так:
$result = array();
while ($row = mysqli_fetch_array($result)) {
$result[] = $row;
}
json_encode($result);
В дополнение к этому — ваш вывод должен иметь свойства id, value и label, а не только «0».
Других решений пока нет …