Автозаполнение JQuery на стороне сервера - PullRequest
5 голосов
/ 16 января 2012

Я пытаюсь настроить поле автозаполнения.

Я прочитал документацию по пользовательскому интерфейсу JQuery, но во всех примерах предполагается, что источником является статический список элементов, из которых JQuery будет выбирать совпадающие записи (я имею в видуstatic = список полон и не зависит от того, что набрал пользователь).

Вот код из примера «источника удаленных данных»:

$( "#birds" ).autocomplete({
    source: "search.php",
    ...

Я бы хотел, чтобы JQueryзвоните search.php?query=mytext (этот URL возвращает список совпадающих элементов), потому что мне нужно искать предложения в базе данных, используя PHP.

Есть ли способ сделать это?Может я не понял документацию?

Ответы [ 3 ]

7 голосов
/ 16 января 2012

из документации jQuery UI по автозаполнению:

Автозаполнение можно настроить для работы с различными источниками данных, просто указав параметр источника. Источник данных может быть:

  • Массив с локальными данными
  • Строка, указав URL
  • Обратный звонок

и далее вниз

Когда используется строка, плагин автозаполнения ожидает, что эта строка будет указывать на ресурс URL, который будет возвращать данные JSON. Это может быть на том же хосте или на другом (должен предоставить JSONP). Параметр запроса " term " добавляется к этому URL. Сами данные могут быть в том же формате, что и локальные данные, описанные выше.

вы пробовали код, который вы даете? он должен вызывать URL search.php? term = mytext

4 голосов
/ 16 января 2012

Вот фрагмент некоторого клиентского кода, который я написал некоторое время назад (изменен для защиты невинных!), Который работает именно так, как вы хотите ...

    function ConfigureAutoComplete() {

        $('#myautocomplete').autocomplete({
            type: "POST",
            minLength: 3,
            source : function (request, response) 
            {                         
                var source_url = "../handlers/MyLookup.ashx?someparameter=" + $("#someparameter").val();

                $.ajax({
                    url: source_url,
                    dataType: "json",
                    data: request,
                    success: function (data) { response(data); },
                    error : function (a,b,c) { HandleLookUpError(a); }
                    });
            },                
            select: function (event, ui) { $('#result').val(ui.item.id); }               
        });
    }

Как уже было сказано,Ваша страница search.php может вернуть все, что вы хотите.Таким образом, вы можете сузить список на сервере и вернуть его клиенту, что позволит пользователю выбирать из этого списка.

2 голосов
/ 16 января 2012

Ну и search.php может вернуть все, что захочет.

Для статического контента вы можете захотеть сделать что-то вроде этого:

$myList = array('pizza'=>array('mushrooms','pepperoni','olives'));
echo json_encode($myList);

Это не далеко от того, что даст вам вызов db.

Множество фреймворковв php вернуть обратно ассоциативный массив после поиска из базы данных.Я считаю (насколько я помню) даже стандартные инструменты mysql, встроенные в php, делают то же самое (или что-то подобное).

json_encode / json_decode может помочь конвертировать все, что вы хотите в php, в json.Тогда все, что вам нужно сделать, это повторить его, и автозаполнение ответит соответственно.

Вы делаете это правильно.Возможно, вам просто нужно отформатировать его немного по-другому.Что вы сейчас выводите из search.php?

О, и я почти забыл, что вам может потребоваться указать, что ваш вывод - это jsonp (хотя иногда вы можете избежать этого):

header('content-type: application/json; charset=utf-8');
...