Я пытаюсь создать функцию прямого поиска в CI (чего я никогда не делал раньше). Я довольно новичок в веб-разработке и все еще учусь. Я нашел этот небольшой учебник о том, как это сделать http://www.blog.orionwebtech.net/codeigniter-jquery-ajax-live-search/?codekitCB=415037771.748888

У меня проблемы с переводом кода из этого руководства для моего приложения. У меня есть таблица с именем properties, и я хочу, чтобы входное значение сравнивалось со столбцом slug и столбцом name. И затем я хочу, чтобы он возвращал слаг и имя в результатах поиска в реальном времени, где входное значение соответствует любому из этих столбцов. Это не будет совпадать с обоими, потому что слаг содержит только цифры, а имя содержит буквы.

Это код, который я придумал, чтобы попытаться сделать это.

Вид:

{amp}lt;div class="something"{amp}gt; {amp}lt;input name="search_data" id="search_data" class="" value="" data-label="Search for a property, a unit, or an resident..." type="text" /{amp}gt; {amp}lt;div id="suggestions"{amp}gt; {amp}lt;div id="suggestionslist"{amp}gt; {amp}lt;/div{amp}gt; {amp}lt;/div{amp}gt; {amp}lt;/div{amp}gt; 

JavaScript:

 {amp}lt;script type="text/javascript"{amp}gt; function ajaxSearch() { var input_data = $('#search_data').val(); if (input_data.length === 0) { $('#suggestions').hide(); } else { var post_data = { 'search_data': input_data, '{amp}lt;?php echo $this-{amp}gt;security-{amp}gt;get_csrf_token_name(); ?{amp}gt;': '{amp}lt;?php echo $this-{amp}gt;security-{amp}gt;get_csrf_hash(); ?{amp}gt;' }; $.ajax({ type: "POST", url: "{amp}lt;?php echo base_url(); ?{amp}gt;search/autocomplete", data: post_data, success: function(data) { // return success if (data.length {amp}gt; 0) { $('#suggestions').show(); $('#autoSuggestionsList').addClass('auto_list'); $('#autoSuggestionsList').html(data); } } }); } } {amp}lt;/script{amp}gt; 

Контроллер:

 {amp}lt;?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Search extends CI_Controller { public function __construct() { parent::__construct(); } public function autocomplete() { $search_data = $this-{amp}gt;input-{amp}gt;post('search_data'); $query = $this-{amp}gt;Search_model-{amp}gt;get_autocomplete($search_data); foreach ($query-{amp}gt;result() as $row): echo "{amp}lt;li{amp}gt;{amp}lt;a href='" . base_url('association/'.$row-{amp}gt;slug) . "'{amp}gt;" . $row-{amp}gt;name . "{amp}lt;/a{amp}gt;{amp}lt;/li{amp}gt;"; endforeach; } } /* End of file search.php */ /* File location: application/controllers */ 

Модель:

 {amp}lt;?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Search_model extends CI_Model { public function __construct() { $this-{amp}gt;load-{amp}gt;database(); } public function get_autocomplete($search_data) { $this-{amp}gt;db-{amp}gt;select('slug, name'); $this-{amp}gt;db-{amp}gt;like('slug', $search_data); $this-{amp}gt;db-{amp}gt;like('name', $search_data); return $this-{amp}gt;db-{amp}gt;get('properties', 10); } } ?{amp}gt; 

Когда я проверял это, я не получил никаких результатов. Мои тестовые данные действительны, потому что в БД есть соответствующая строка. Что я делаю неправильно?

 {amp}lt;?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Search_model extends CI_Model { public function __construct() { parent::__construct(); } public function get_autocomplete($search_data) { $this-{amp}gt;db-{amp}gt;select('slug, name'); $this-{amp}gt;db-{amp}gt;like('slug', $search_data); $this-{amp}gt;db-{amp}gt;like('name', $search_data); $query = $this-{amp}gt;db-{amp}gt;get('properties', 10); return $query-{amp}gt;result(); } } ?{amp}gt; 

По вашей ссылке вам не хватает onkeyup=ajaxSearch(); т.е.

 {amp}lt;input name="search_data" id="search_data" class="" value="" data-label="Search for a property, a unit, or an resident..." type="text" onkeyup="ajaxSearch();" /{amp}gt;