Автозаполнение Jquery изменяет источник на основе префикса входного значения

#javascript #php #jquery #autocomplete

#javascript #php #jquery #автозаполнение

Вопрос:

У меня есть 2 удаленных php-скрипта в качестве источников данных, и я хочу вызывать каждый на основе пользовательского префикса ввода. Я не мог найти, как это сделать с помощью автозаполнения jquery или с помощью javascript. Вероятно, мне потребуется вызвать функцию регулярных выражений, чтобы решить, какой источник данных использовать.

Я получаю пользовательский ввод из обычного текстового поля формы:

 <script type="text/javascript">
            jQuery(document).ready(function() {
                    $('#srv_search').autocomplete({
                            source:'srv_search.php',
                            minLength:2});
            });
    </script>
            <form action="site.php" method="post">
                    <input type="text" id="srv_search" name="server" value="" style="width: 80%;">
                    <input type="submit" value="Go">
            </form>
 

Спасибо,
Дэвид

PS, это то, что я пробовал на основе ответа и не работает:

 $('#srv_search').autocomplete({
                            minLength:2,
                            source: function(request, response) {
                                    var usearch = request;
                                    var upatt = new RegExp(/^f[0-9]/);
                                    if (upatt.test(usearch)) {
                                            var dataSource = "srv_search.php";
                                    }
                                    else {
                                            var dataSource = "des_search.php";
                                    }
                                    $.get(dataSource, {term: request}, response);
                                    }
                    });
 

Комментарии:

1. Почему бы не обрабатывать логическую серверную часть в контроллере, а не через javascript

2. Отличный вопрос. Я сделал, но результаты отображаются не так, как ожидалось. в FF и Chrom, в IE это сработало. Итак, я пытаюсь фильтровать со стороны клиента.

Ответ №1:

Использование source: someFn

Где

 someFn = function(request, response) {
    // request["term"] = Text entered by User
    // Choose your data source based on it.

    var dataSource = /* whatever */;
    $.getJson(dataSource, request, response);

    // or $.get(dataSource, request, response);
    // basically response is to be used as callback
}
 

PS: Это непроверенный, просто написал быстрый код, чтобы подтолкнуть вас в правильном направлении. Дайте мне знать, если вам нужна дополнительная помощь.

Комментарии:

1. Спасибо, пожалуйста, обратите внимание, что я отредактировал свой первоначальный пост с помощью предложенного вами кода, и у меня это не сработало. Я, наверное, что-то пропустил… еще раз спасибо.

2. @DavidPeer, отредактировал оригинальный ответ, чтобы исправить … на самом деле запрос уже имеет формат {term: "whatever"} . Смотрите рабочий пример здесь — jsfiddle.net/qePj2 (используйте консоль браузера, чтобы увидеть выполняемый запрос)