Виджет автозаполнения ожидает данные в следующем формате:
Локальные данные могут быть простым массивом строк или содержать
Объекты для каждого элемента в массиве, с меткой или
собственность или оба. Свойство метки отображается в предложении
меню. Значение будет вставлено в элемент ввода после того, как пользователь
выбрал что-то из меню. Если указано только одно свойство,
будет использоваться как для
(акцент мой)
Это не значит, что вы не можете использовать удаленный источник, который не отвечает с этим форматом; Вы можете поменять данные в соответствии с этими требованиями перед вызовом поставляемой функции response
.
Имея это в виду, я бы изменил пример для вашего случая следующим образом:
lastXhr = $.getJSON( "search.php", request, function( data, status, xhr ) {
cache[ term ] = $.map(data, function(item) {
return {
label: item.name,
value: item.name,
slug: item.slug,
name: item.name
};
});
if ( xhr === lastXhr ) {
response( data );
}
});
Это должно привести к тому, что результаты будут отображаться правильно (и кеширование должно работать нормально). Для другого примера этого, посмотрите пример удаленного JSONP .