Я ищу способ фильтрации результатов автозаполнения, если в функцию отправляется пользовательский флаг вместе с поисковым термином. Например, если пользователь хочет найти все города со стадионом / бассейном и т. Д., Он может выбрать это как параметр фильтрации.
var filter = $.inArray('1', selectedTypes);
Эта строка ищет только один флаг, чтобы увидеть, работает ли он
У меня есть автозаполнение, настроенное и работающее без фильтра, но сейчас я не знаю, как его настроить. Любая помощь приветствуется.
JQuery:
$('#city').autocomplete({
delay: 0,
source: function (request, response) {
var selectedTypes = $("#filter").val();
var filter = $.inArray('1', selectedTypes);
$.ajax({
url: "/cities/ajaxGetCities/" + request.term,
dataType: "json",
contentType: "application/json",
success: function (data) {
if (typeof(data[0]) === 'undefined') {
return null;
}
response($.map(data, function (value, key) {
return {
label: value.cityName,
value: value.id
}
}));
}
});
},
select: function (event, ui) {
$("#city").val(ui.item.label);
return false;
},
autoFocus: true
});
PHP (в контроллере с использованием CodeIgniter):
public function ajaxGetCities(string $term, int $filter = null)
{
if ($filter) {
$cities = getFilteredCities($filter)
} else {
$cities = getCities($term);
}
$filteredCities = [];
foreach ($cities as $city) {
if (stripos($city->cityName, $term) !== false ) {
$filteredCities[] = $city;
}
}
exit(json_encode($filteredCities));
}
Я попробовал это в JS и удалил аргументы func в контроллере, но $ _POST был пуст
$.ajax({
type: 'POST',
data: {term: request.term, flag: filter},
url: "/cities/ajaxGetCities",
dataType: "json",
contentType: "application/json",
success: function (data) {
if (typeof(data[0]) === 'undefined') {
return null;
}
response($.map(data, function (value, key) {
return {
label: value.cityName,
value: value.id
}
}));