После нескольких часов расшифровки учебников я, наконец, получил codeigniter и jquery autocomplete, чтобы работать друг с другом … вроде.
Firebug отображает правильные условия поиска в формате JSON, но в раскрывающемся списке не отображается текст. Если есть 2 результата, он отображает 2 пустых строки.
вы можете видеть, что он «не работает» здесь: http://rickymason.net/blurb/main/home
JS:
$(document).ready(function() { $(function(){ $( "#filter" ).autocomplete({ source: function(request, response) { $.ajax({ url: "http://rickymason.net/blurb/main/search/", data: { term: $("#filter").val()}, dataType: "json", type: "POST", success: function(data){ response(data); } }); }, minLength: 2 }); }); });
контроллер:
public function search() { $term = $this->input->post('term', TRUE); $this->thread_model->autocomplete($term); }
Модель:
public function autocomplete($term) { $query = $this->db->query("SELECT tag FROM filter_thread ft INNER JOIN filter f ON ft.filter_id = f.filter_id WHERE f.tag LIKE '%".$term."%' GROUP BY tag"); echo json_encode($query->result_array()); }
Надеюсь, это легко исправить!
благодаря
Изменение кода на что-то вроде этого будет работать (я протестировал на вашем сайте)
$( "#filter" ).autocomplete({ source: function(request, response) { $.ajax({ url: "http://rickymason.net/blurb/main/search/", data: { term: $("#filter").val()}, dataType: "json", type: "POST", success: function(data){ var resp = $.map(data,function(obj){ return obj.tag; }); response(resp); } }); }, minLength: 2 });
Скопируйте и вставьте вышеуказанный блок кода в консоль firebug, а затем попробуйте автозаполнение. Это будет работать. Я пробовал на вашем сайте, и это сработало.
Во-вторых, вам не нужны как $(document).ready(function() {
и $(function(){
в то же время, когда они выполняют одно и то же.
Проверьте этот раздел автозаполнения jQuery UI
Ожидаемый формат данных
Данные из локальных данных, URL-адреса или обратного вызова могут иметь два варианта:
Массив строк:
["Выбор1", "Выбор2"]
Массив объектов с
метки и значения: [{label: «Choice1», value: «value1»},
…]
Ссылка: $ .map
Рассматривая этот вопрос на SO, вам нужно настроить свои label
и поля value
в ответе ответа. Попробуйте либо организовать вывод PHP JSON для сопоставления, либо сопоставить возврат с чем-то следующим следующим (непроверенным).
response( $.map(data, function(item){ return { label: item.tag, value: item.tag }; })