Как сделать простой autocomplete (jQuery & ajax)

Разберемся, как добавить в форму autocomplete с загрузкой данных с помощью ajax.

Для начала добавьте на страницу jQuery & jQuery ui

Допустим, у вас есть input с классом autocomplete-field, к которому как раз хотите добавить автозаполнение:

<input type="text" class="autocomplete-field" name="test" value="" />
 

Привяжем autocomplete к элементам, у которых есть класс  autocomplete-field:

 $('.autocomplete-field').autocomplete({
source: function( request, response ) {
$.ajax({
url: "example.php",
dataType: "json",
data: {
search: request.term
},
success: function( data ) {
response( data );
}
});
},
minLength: 3,//минимальное кол-во символов,которые надо напечатать для срабатывания autocomplete
});

В данном коде example.php - это .php файл, который будет обрабатывать информацию и выдавать ответ. 

search: request.term - это то, что пользователь ввел в input (понадобится для поиска по базе и отсеивания лишнего). При этом search можно заменить на любое другое слово  - это будет  параметр в вашем  .php файле.

Упрощенный php файл для вывода результатов: 

<?php

$res = [
[
'id' => 1,
'label' => 'Тест 1', // что будет отображаться в autocomplete
'value' => '1', //input value при выборе данного пункта
],
[
'id' => 2,
'label' => 'Тест 2',
'value' => '2',
],
[
'id' => 3,
'label' => 'Тест 3',
'value' => '3',
]
];

header("Content-type:application/json");
echo json_encode($res);
return $res;
?>

Пример  .php файла:

<?php
$searchTerm = $_REQUEST['search']; // введенный пользователем текст
$searchResults = ... // тут подсоединяетесь к базе и делаете выборку
$res = [];

if(count($searchResults) > 0){
foreach ($searchResults as $searchResult){
$res[] = [
//допустим у вас есть объект $searchResult, из которого вы и получаете данные:
'id' => $searchResult->getId(),
'label' => $searchResult->getLabel(),
'value' => $searchResult->getValue(),
];
}
}

header("Content-type:application/json");
echo json_encode($res);
return $res;
?>

 

 

Комментарии

Комментариев пока нет, вы можете оставить свой: