Отправить поисковый запрос и пользовательский флаг в функцию php через Ajax - PullRequest
0 голосов
/ 30 апреля 2018

Я ищу способ фильтрации результатов автозаполнения, если в функцию отправляется пользовательский флаг вместе с поисковым термином. Например, если пользователь хочет найти все города со стадионом / бассейном и т. Д., Он может выбрать это как параметр фильтрации.

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
        }
    }));

1 Ответ

0 голосов
/ 30 апреля 2018

"$ _POST был пуст"

... это потому, что вы отправляете данные как JSON, из-за указания

contentType: "application/json"

в опциях AJAX. Но чего ожидает сервер? По умолчанию PHP ожидает нормальные данные формы, а не JSON. Если вы отправляете JSON, для его обработки потребуется немного дополнительного кода.

Если вы просто удалите эту строку из опций AJAX, данные будут отправлены в виде данных формы (по умолчанию), и PHP сможет легко их прочитать как стандартные переменные POST.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...