Какой параметр передается на сервер
Вам необходимо передать request.term
в свой код на стороне сервера (из документации):
Объект запроса с единственным свойством, называемым «term», который ссылается на значение, которое в данный момент находится в текстовом вводе.
По сути, в вашем коде autocomplete
вы получите что-то вроде этого:
$("#autocomplete").autocomplete({
// request.term needs to be passed up to the server.
source: function(request, response) { ... }
});
и как должен выглядеть ответ JSON?
Виджет autocomplete
ожидает массив объектов JSON со свойствами label
и value
(хотя, если вы просто укажете value
, он будет использоваться в качестве метки).Так что в простейшем случае вы можете просто вернуть данные, которые выглядят следующим образом:
[
{ label: 'C++', value: 'C++' },
{ label: 'Java', value: 'Java' }
{ label: 'COBOL', value: 'COBOL' }
]
Если вам нужно что-то более сложное, вы можете использовать аргумент success
функции $.ajax
для нормализации данныхвы вернетесь до того, как автозаполнение получит его:
source: function( request, response ) {
$.ajax({
/* Snip */
success: function(data) {
response($.map( data.geonames, function( item ) {
return {
label: item.name + (item.adminName1 ? ", " + item.adminName1 : "") + ", " + item.countryName,
value: item.name
}
}));
}
});
Этот код взят из примера здесь (Это хороший общий пример работы ajax + autocomplete в более сложном сценарии),
По сути, при успешном выполнении запроса ajax полученные данные нормализуются (с использованием $.map
) в соответствии с ожиданиями виджета автозаполнения.
Надеюсь, это поможет.